Skip to main content
 首页 » 编程设计

Python。奇怪的类属性行为

2025年05月04日10duanxz

>>> 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']