这是多重继承时初始化函数__init__()的内容,这个涉及到super()和__mro__的用法。
在继承的时候,子类中若需要调用父类的__init__()函数,则需要用super().__init__()。但若是多重继承,什么时候调用哪一个父类的__init__()函数,是由__mro__列表顺序给出的。
在你的这个程序中,D类的__mro__表如下:
<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>
当创建D类的实例化时,会先调用D类的__init__()函数。之后每遇到一次super().__init__()函数就会从上表 中向后找一个父类去执行它的__init__()函数,一直到列表为空或者最后一个执行的__init__()函数中没有super()__init__()函数为止。
我们现在看一下你的程序执行过程:先执行D的__init__()函数,遇到super;然后去执行B的__init__()函数,再次遇到super;接着去执行C的__init__()函数,C中没有遇到super函数,执行完毕之后返回B的__init__()函数;然后返回D的__init__()函数,结束。
假如,C中有super,而B中没有super。那么结果会更短,从D的__init__()函数进入B的__init__()函数,然后返回D的__init__()函数,结束。
看看之前回复的一个帖子,我当时写的很详细。 一一复制过来太麻烦了