我一直在尝试理解Python处理类和实例变量的方法。特别是,我发现这个答案非常有帮助。基本上它说,如果你声明了一个类变量,然后你对
那么,我考虑过——如果我想让我的类的每个实例都有一个具有某些默认值(比如零)的成员,我应该这样做:
你是指这样吗?或者像这样吗?
所以,为什么这个有效呢?我哪里理解有误了吗?值得一提的是,我的面向对象编程知识主要来自于C++,因此通过类比或指出其不足之处进行解释可能会更有帮助。
[instance].property
进行赋值,你将会分配到完全不同的变量——一个在与类变量不同的命名空间中。那么,我考虑过——如果我想让我的类的每个实例都有一个具有某些默认值(比如零)的成员,我应该这样做:
class Foo:
num = 0
你是指这样吗?或者像这样吗?
class Foo:
def __init__(self):
self.num = 0
根据我之前阅读的内容,我认为第二个示例将初始化“right”变量(实例而不是类变量)。然而,我发现第一种方法也完全正常:
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?
所以,为什么这个有效呢?我哪里理解有误了吗?值得一提的是,我的面向对象编程知识主要来自于C++,因此通过类比或指出其不足之处进行解释可能会更有帮助。