【发布时间】:2019-04-09 16:28:42
【问题描述】:
我有一堂课:
class personInfo:
def __init__(self,name,age,height,hairColour,face):
self.name = name
self.age = age
self.height = height
self.hairColour = hairColour
self.face = face
我在这里有几张图片,我使用 pygame 模块加载它们。
yellowFace = pygame.image.load("happy.png")
blueFace = pygame.image.load("sad.png")
redFace = pygame.image.load("angry.png")
我创建了一个包含该类实例的数组。我在这里填充它。
personArray = []
while len(array) != 10:
personArray.append(personClass("John",32,6,"Blond",yellowFace))
我想将该类的实际变量(姓名、年龄、身高、头发颜色等)存储在一个名为“personStorage”的变量中。但是,我不能让该 var 可变,因为我需要访问该 var 的值并更改它们。这样做不能更改 personArray 中任何实例的值。我该怎么做?
编辑: 我似乎也无法复制此类,因为我收到一个类型错误,上面写着:“无法腌制 pygame.surface 对象”,因为我在该类中有一个表面对象的值。
【问题讨论】:
-
你的意思是像
personStorage = ("John", 32, 6, "Brown"); personClass(*personStorage)这样的吗? -
它更像是 personStorage = personArray[2] ,它会为我提供该特定实例的值,以便我可以更改它们。例如,我可以做 personStorage.name = "Rick" 例如。我遇到的问题是 personArray[2] 的名称 var 更改为“Rick”,而不是默认值“John”
-
所以您基本上需要
personInfo实例的副本,而不仅仅是对它的引用?按照copy模块的描述实现personInfo.__copy__,然后使用personStorage = copy.copy(personArray[2])。 (deepcopy可能是必要的,具体取决于您的情况。) -
是的,这基本上就是我所需要的。然后我想更改数组中的特定实例。例如 personArray[2] = personStorage。举个例子。
-
如果您要将修改后的副本分配回同一个插槽,为什么不就地修改原始副本?我只是想弄清楚你真正需要什么。