我在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]
答案 0 :(得分:6)
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
这个名字现在有点误导了...