class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print Parent.x, Child1.x, Child2.x
# 1 1 1
Child1.x = 2
print Parent.x, Child1.x, Child2.x
# 1 2 1
Parent.x = 3
print Parent.x, Child1.x, Child2.x
# 3 2 3
这段代码重点在第三次print结果“3 2 3”
当子类没有重新设置父类的变量时,会直接使用父类的变量,所以当父类变量发生变化时,Child2也发生变化。
我们可以用下面代码列出类的属性
print ', '.join(['%s:%s' % item for item in Child2.__dict__.items()])
输出:
“Child2 __module__:__main__, __doc__:None”
可以看出里面是没有属性“x”的。所以会引用父类的x值。
对于并发运行多个子类的场景,子类使用class变量有可能导致value传递到其它子类。所以我们要明确在子类使用前对变量进行初始化。
本文通过一个简单的Python代码示例,解释了类变量在继承过程中的行为特点,特别是父类与子类间如何共享和修改类变量。强调了在并发场景下使用类变量可能引发的问题,并建议在子类中对类变量进行明确初始化。
1822

被折叠的 条评论
为什么被折叠?



