gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:51 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com