尽管在__init__中定义了Python类成员列表,但它们仍跨实例共享

问题描述

class Thing:
    def __init__(self,name,number):
        self.name = name
        self.number = number

class Collection:
    def __init__(self,description,things_list = []):
        self.description = description
        self.things_list = things_list

    def add_thing(self,thing):
        self.things_list.append(thing)

x_col = Collection("Collection X")
y_col = Collection("Collection Y")

x_col.add_thing(Thing("a",0))
x_col.add_thing(Thing("b",1))

y_col.add_thing(Thing("c",2))
y_col.add_thing(Thing("d",3))
y_col.add_thing(Thing("e",4))

print(x_col.description)
print(len(x_col.things_list))
print(y_col.description)
print(len(y_col.things_list))

运行脚本时,我得到:

Collection X
5
Collection Y
5

而不是预期的

Collection X
2
Collection Y
3

我进行了一些搜索以查看是否有人遇到此问题,但是我发现的所有其他问题都涉及到不使用__init__构造函数的人。即使我一直等到完成添加到x_col的Things_list中后,这种行为仍然存在:

x_col = Collection("Collection X")
x_col.add_thing(Thing("a",1))

y_col = Collection("Collection Y")

y_col最终只是使用x_col列表中的两件事创建的。

Windows 10 2004上的Python 3.8.5 64位。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)