【问题标题】:Why does list property in python take all values of all objects in list of objects?为什么python中的list属性取对象列表中所有对象的所有值?
【发布时间】:2019-09-05 14:39:48
【问题描述】:

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

【问题讨论】:

    标签: python


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 2012-11-11
      • 2019-09-14
      • 2020-05-20
      相关资源
      最近更新 更多