同一类的两个实例的Class属性

scd*_*dmb 6 python

有这个代码:

class Sample:
    variable = 2
object1 = Sample()
object2 = Sample()
print object1.variable  # 2
print object2.variable  # 2
object1.variable = 1
print object1.variable  # 1
print object2.variable  # 2 <- why not 1 too?
Run Code Online (Sandbox Code Playgroud)

为什么object2.variable在赋值给类变量后也不是1?

hoc*_*chl 5

不要将它与静态变量混淆.在您的情况下,两个对象在实例化后都有一个variable指向对象的名称2.现在,如果将变量更改为1一个对象,则所有操作都将绑定name到另一个对象,即1对象.object2中的名称仍然引用一个2对象.原始的类对象是未触及的,并且仍然具有variable指向a 的名称2,因此object3 = Sample()也将具有2绑定variable.

解决这个问题的一种方法是编写类如下的类:

>>> class Sample:
...     variable=[2]
... 
>>> object1 = Sample()
>>> object2 = Sample()
>>> print object1.variable[0]; print object2.variable[0]
2
2
>>> object1.variable[0]=1
>>> print object1.variable[0]; print object2.variable[0]
1
1
Run Code Online (Sandbox Code Playgroud)

这是因为所有类都将名称绑定variable到同一个muatable对象,并且您操纵同一个对象的内容(variable[0]).