的Python类的静态成员:通过实例
问题描述:
访问我有一个类:的Python类的静态成员:通过实例
class A:
x = 12
是什么静态成员?:
a = A()
print(a.x) # >> 12
print(a.__class__.x) # >> 12
答
这两种接入方式之间的区别是没有区别的时候获得价值; 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
结论:如果您在更新类的实例的值,该更改将被限制在该实例。但是,如果你改变类变量的值,该变化会反映到所有的情况下,如果实例不具有明确覆盖的值。
在这种情况下没有,但你可以在影子类的命名空间分配直接一个实例。 –