的Python类的静态成员:通过实例

问题描述:

访问我有一个类:的Python类的静态成员:通过实例

class A: 
    x = 12 

是什么静态成员?:

a = A() 
print(a.x) # >> 12 
print(a.__class__.x) # >> 12 
+0

在这种情况下没有,但你可以在影子类的命名空间分配直接一个实例。 –

这两种接入方式之间的区别是没有区别的时候获得价值; a.x将回退到A.x(与a.__class__.x相同)。

但是,如果您尝试设置一个值,a.x = 13将设置一个新的实例变量,并将A.x保留为原始值。从此,a.x总会找到实例值不是一个类。

没有区别,它们是相同的。这与python 查找它的属性有关。

它首先在实例属性,如果没有找到它,它看起来在属性,等等。

在第二条语句(a.__class__.x)你明确地告诉蟒蛇直视在类字典,跳绳实例查找。

这里,a.x返回类实例的变量值(范围限于类对象),而A.x返回类变量的值。你可以验证它想:

# create object of class A() 
>>> a = A() 
>>> b = A() 

# same value 
>>> A.x 
12 
>>> a.x 
12 

# updated a.x 
>>> a.x = 5 
>>> A.x # still old value 
12 
>>> a.x # new value 
5 
>>> b.x # old value 
12 

# updated A.x 
>>> A.x = 9 # new value 
>>> A.x 
9 
>>> a.x # old value 
5 
>>> b.x # new value 
9 

结论:如果您在更新类的实例的值,该更改将被限制在该实例。但是,如果你改变类变量的值,该变化会反映到所有的情况下,如果实例不具有明确覆盖的值。