【发布时间】:2011-01-26 08:05:08
【问题描述】:
我一直在尝试理解 Python 对类和实例变量的处理。特别是,我发现this answer 很有帮助。基本上它说,如果您声明一个类变量,然后对[instance].property 进行赋值,您将完全分配给一个不同的变量——一个位于与类变量不同的命名空间中的变量。
然后我考虑了——如果我希望我的类的每个实例都有一个具有某些默认值(比如零)的成员,我应该这样做:
class Foo:
num = 0
还是这样?
class Foo:
def __init__(self):
self.num = 0
根据我之前阅读的内容,我认为第二个示例将初始化“正确”变量(实例而不是类变量)。但是,我发现第一种方法也很有效:
class Foo:
num = 0
bar = Foo()
bar.num += 1 # good, no error here, meaning that bar has an attribute 'num'
bar.num
>>> 1
Foo.num
>>> 0 # yet the class variable is not modified! so what 'num' did I add to just now?
那么.. 为什么这行得通?我没有得到什么? FWIW,我之前对 OOP 的理解来自 C++,所以类比解释(或指出它崩溃的地方)可能会有用。
【问题讨论】: