我在 python 中创建了一个类,这个类有一个属性是列表。然后我尝试实例化这些对象的列表,但是当我尝试将一个新成员附加到对象的该属性时,所有对象的所有列表都会附加值。我是 python 的新手,有人可以尝试解释我的代码中的错误在哪里吗?
class NewClass():
classList=[]
listObjects=[]
listObjects.append(NewClass())
listObjects.append(NewClass())
listObjects.append(NewClass())
listObjects.append(NewClass())
for i in range(0,4):
listObjects[i].classList.append(i)
for i in range(0,4):
print(listObjects[i].classList)
printed result
[0, 1, 2, 3]
[0, 1, 2, 3]
[0, 1, 2, 3]
[0, 1, 2, 3]
wanted result
[0]
[1]
[2]
[3]
最佳答案
classList
是一个类属性(即与该类的所有实例共享);不是实例属性。
为了获得你想要的行为,你的类应该是:
class NewClass:
def __init__(self):
self.classList = []
listObjects = [NewClass() for i in range(4)]
for i in range(4):
listObjects[i].classList.append(i)
for i in range(4):
print(listObjects[i].classList)
这样每个实例都有自己独立的classList
。
虽然 classList
这个名字现在有点误导......
关于python - 为什么 python 中的列表属性采用对象列表中所有对象的所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55692153/