为什么python中的list属性采用对象列表中所有对象的所有值?

时间:2019-04-15 15:08:07

标签: python

我在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]

1 个答案:

答案 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这个名字现在有点误导了...