Skip to main content
 首页 » 编程设计

Python 和对象/类属性之发生了什么事

2025年05月04日16lonelyxmas

有人可以解释为什么 Python 会执行以下操作吗?

>>> class Foo(object): 
...   bar = [] 
... 
>>> a = Foo() 
>>> b = Foo() 
>>> a.bar.append(1) 
>>> b.bar 
[1] 
>>> a.bar = 1 
>>> a.bar 
1 
>>> b.bar 
[1] 
>>> a.bar = [] 
>>> a.bar 
[] 
>>> b.bar 
[1] 
>>> del a.bar 
>>> a.bar 
[1] 

这很困惑!

请您参考如下方法:

这是因为按照您的编写方式,bar 是类变量而不是实例变量。

要定义一个实例变量,在构造函数中绑定(bind)它:

class Foo(object): 
  def __init__(self): 
    self.bar = [] 

请注意,它现在属于 Foo 的单个实例 (self) 而不是 Foo 类,您将看到结果您在分配给它时期望。