见 super() 文档: Return a proxy object that delegates method calls to a parent or sibling class of type. This is useful for accessing inherited methods that have been overridden in a class. super 并不只会指向父类,还可能指向继承关系上的“兄弟类”。 每个对象(或者类)有自己的 method resolution order(mro) 。super 会顺着对象的 mro 往下找,而不是找父类。 类 E 的 mro 是 E -> B -> C -> A -> object 。所以在 E 的对象 e 的 B 基类类调用 super ,会从 C 开始找下去,于是调用了 C.__init__ 。但是 C 基类里的 super 会从 A 找下去,于是不会调用 B.__init__ 。
见
super()
文档:super
并不只会指向父类,还可能指向继承关系上的“兄弟类”。每个对象(或者类)有自己的 method resolution order(mro) 。
super
会顺着对象的 mro 往下找,而不是找父类。类 E 的 mro 是 E -> B -> C -> A -> object 。
所以在 E 的对象 e 的 B 基类类调用
super
,会从C
开始找下去,于是调用了C.__init__
。但是 C 基类里的 super 会从
A
找下去,于是不会调用B.__init__
。