引用diveintopython,
“您已经了解了数据属性,这些属性是变量所拥有的 类的特定实例。 Python还支持类属性, 这是类本身拥有的变量。“
一个类拥有的类属性在什么意义上?如果更改特定实例中类属性的值,则该更改仅反映在该实例中(而不是在该类的其他实例中)。
从我的观点来看,这使得类属性与数据(即实例)属性基本相同(尽管存在语法差异)。
在C ++中更改“类变量”的值,并且该更改将反映在所有实例中。
两者有什么区别?
答案 0 :(得分:1)
我认为这个例子可以解释你的意思。
class A(object):
bar = 1
a = A()
b = A()
b.bar = 2
print a.bar # outputs 1
A.bar = 3
print a.bar # outputs 3
print b.bar # outputs 2
在这种情况下,b.bar
将在b.bar = 2
之后由实例拥有,但a.bar
仍将由类拥有。这就是为什么在课堂上更改它后会在实例上进行更改,而b.bar
则不会。
答案 1 :(得分:1)
此问题与this one重复:
>>> class B(object):
... foo = 1
...
>>> b = B()
>>> b.__dict__
{}
>>> b.foo = 2
>>> b.__dict__
{'foo': 2}
为b
分配值时,添加实例变量;你没有修改类属性。