在方法中执行的代码在该方法的本地范围内运行。如果访问不在此范围内的对象,Python将在全局/模块范围内而 在类范围或任何封闭类的范围内查找对象!
这意味着:
A.a = 'a_b'
insideC.B.__init__
将设置全局A
类的class属性,而不是C.A
您可能想要的。为此,您必须这样做:
C.A.a = 'a_b'
另外,如果您在子类中覆盖父方法,Python将不会调用父方法。你必须自己做。
作用域规则意味着,如果要在内部调用__init__
父类的方法C.B.__init__
,则它必须看起来像这样:
C.A.__init__(self)
而不是这样的:
A.__init__(self)
这可能是您尝试过的。