【发布时间】:2018-04-03 09:41:09
【问题描述】:
我有一个需要附加到列表的类的实例。但是,在追加 N 个实例时,列表的值是最后插入的实例。
这是我正在尝试做的复制(原始文件很大):
class SomeParent:
listOfObject = []
tempObject = None
def addObjects(self):
for i in range(10):
self.tempObject = Child()
self.changeTempObjectX(i)
listOfObject.append(self.tempObject)
def changeTempObjectX(self, i):
self.tempObject.x = i
class Child:
x = None
问题:理论上,listOfObject 应该包含 10 个具有不同 x 属性 (0-9) 的 Child 类实例。发生的情况是listOfObject(所有这些)的值与最后插入的实例相同。
我在搜索时发现这与可变性和引用有关。我认为正在发生的事情是,插入到列表中的是对先前值的引用,而先前值又会指向最后插入的值。
尝试过:将listOfObject转换为元组,加法操作是这样的self.listOfObject = self.listOfObject + (self.tempObject,)。我还尝试使用所有类型的copy,但都不起作用。
我知道应用程序的结构,我不需要更改它,因为重构代码需要大量的努力。创建、编辑和保存实例非常简单。
如何将类的实例插入到列表中?
【问题讨论】:
-
我已经尝试过了,但它不起作用。 (在帖子中提到)
-
将类的实例插入到列表中。问题是,由于我是从引用中插入的,因此这些值也会随着时间而变化。我不能简单地做 list.append(Class())
-
您的示例按预期工作......虽然它在
listOfObject之前缺少self.。 -
您能解释一下您是如何尝试访问列表值的,因为我可以使用您的代码获取所有 10 个值。
-
@Fabbus 同意了。需要
self.listOfObject.append(self.tempObject)。
标签: python python-3.x oop