>>> class Abcd:
... a = ''
... menu = ['a', 'b', 'c']
...
>>> a = Abcd()
>>> b = Abcd()
>>> a.a = 'a'
>>> b.a = 'b'
>>> a.a
'a'
>>> b.a
'b'
这一切都是正确的,每个对象都有自己的“a”,但是......
>>> a.menu.pop()
'c'
>>> a.menu
['a', 'b']
>>> b.menu
['a', 'b']
怎么会这样? 以及如何使用列表作为类属性?
请您参考如下方法:
这是因为您初始化 menu 属性的方式是将所有实例设置为指向同一个列表,而不是具有相同值的不同列表。
相反,使用类的 __init__ 成员函数来初始化值,从而创建一个新列表并将该列表分配给该类的特定实例的属性:
class Abcd:
def __init__(self):
self.a = ''
self.menu = ['a', 'b', 'c']
