类和数据属性有什么区别?

时间:2011-12-20 07:29:55

标签: python

引用diveintopython,

  

“您已经了解了数据属性,这些属性是变量所拥有的   类的特定实例。 Python还支持类属性,   这是类本身拥有的变量。“

一个类拥有的类属性在什么意义上?如果更改特定实例中类属性的值,则该更改仅反映在该实例中(而不是在该类的其他实例中)。

从我的观点来看,这使得类属性与数据(即实例)属性基本相同(尽管存在语法差异)。

在C ++中更改“类变量”的值,并且该更改将反映在所有实例中。

两者有什么区别?

2 个答案:

答案 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分配值时,添加实例变量;你没有修改类属性。