(二)错误地使用类变量
先看下面这个例子:
>>> class A(object):
... x = 1
...>>> class B(A):
... pass
...>>> class C(A):
... pass
...>>> print A.x, B.x, C.x
1 1 1
这样是有意义的:
>>> B.x = 2
>>> print A.x, B.x, C.x
1 2 1
再来一遍:
>>> A.x = 3
仅仅是改变了A.x,为什么C.x也跟着改变了。
在Python中,类变量都是作为字典进行内部处理的,并且遵循方法解析顺序(MRO)。在上面这段代码中,因为属性x没有在类C中发现,它会查找它的基类(在上面例子中只有A,尽管Python支持多继承)。换句话说,就是C自己没有x属性,独立于A,因此,引用 C.x其实就是引用A.x。>>> print A.x, B.x, C.x
3 2 3