因为Python中的多态性,基类A和子类B的 init() 方法会被引用,但是无论何时只会调用最近定义的一个方法。当调用C的 init() 时,会产生上溯到B的 init() 方法,所以最后输出的是B的 init() 方法中定义的print语句。
你可以参照官方文档的解释。
里面有提到,当__new__
方法没有返回新的实例时,__init__
方法就不会被执行。
所以如果在B
类的__new__
方法的末尾添加:
return super().__new__(self)
这样调用父类的__new__
方法,就会输出(自己输代码的时候简化了一下):
A __init__
B __new__
B __init__
B __new__
C __init__
你下面两个__init__的格式是不是写错了?按理会调用,你把A中的复制到b和c中。注意这两个短_ 很容易搞错。