Python: super真的是调用父类吗?
问题1:既然重写了子类的构造函数,为什么还需要去调用super?
问题2:super到底执行顺序是什么样的?
答1:不是所有的子类都有必要去调用super。
假设继承Thread,在初始化函数里面需要赋值name。但真的需要赋值吗?
其实Thread类的初始化函数本身就做了很多判断,所以没必要写冗余代码。
所以把构造函数交给父类Thread去实例化,不用自己再去写不必要的逻辑了。
答2:super并不是去调用父类的方法。
其执行顺序牵涉到类属性和示例属性以及其查找顺序。【即MRO算法(深度优先、广度优先、c3算法)】
实操:
结果是先打印D再打印B,这是没问题的。关键是B后打印的是C而不是A。
这就证明了super()真的不是调用父类而是调用MRO(_mro)这个顺序里的下一个类.[这就需要您知道类和实例属性的查找顺序—mro查找]