有这个代码:
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?
不要将它与静态变量混淆.在您的情况下,两个对象在实例化后都有一个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]).