对于定义的每一个类,python继承super会计算絀解析顺序(mro)列表
注意: 子类的对象属性不能超过其各个父类属性个数的最大值,如果不同父类有不同的属性定义, 子类需要全部继承时,需要使用*arges, **kwarges 不定长参数 使父类的属性个数不定长,此时子类继承时能获得所有的属性
自己编个小例子就可以看到解答叻这样写的“后果”就是B的__init__没有被调用,我试了其他例子好像python继承super都只用最近的那个父类,比如A
效果一样还不够好。因为没有調用super()super的一大好处在于,当父类的名字修改时其继承类不用修改调用方法。
下面给出完美解决方案:
注意:输出结果是b, a, c 而非a, b, c为什么?
这里就要用上面的mro()输出来解释了MRO全称Method Resolution Order, 就是用来定义继承方法的调用顺序,自python继承super2.3以来MRO采用广度优先(区别于深度优先)的规则定义。按广度优先的规则出来的顺序就是: