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

标签 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]

最佳答案

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/

相关文章:

Python-Matplotlib : plotting pivot table for hydrological year

python - 将 C 结构传递给 C DLL 中的函数

python - 没有任何缓存的随机偏移二进制原始磁盘写入

python - 当某些文本在 python 3 前面时如何打印文本进度条?

python - 引用计数降为零后多久调用 `__del__`?

python - 如何使用python计算文本文件中的总行数

python - Scrapy Crawler 不跟踪链接

python - 有没有办法将多个 Excel 选项卡/工作表从单个 xlsx 读取到多个数据帧,每个数据帧都以工作表名称命名?

python - Django - 提交联系表单时出现 405 错误

python - 为什么我的 Django 用户模型的密码没有经过哈希处理?