多重继承
继承是面向对象编程的一个重要的方式,通过继承,子类就可以扩展父类的功能。和c++一样,在python中一个类能继承自不止一个父类,这叫做python的多重继承(Multiple Inheritance )。多重继承的语法与单继承类似:
class SubclassName(BaseClass1, BaseClass2, BaseClass3, ...):
pass
方法解析顺序(Method Resolution Order,MRO)
比如针对如下的代码:
>>> class F(object): pass
>>> class E(object): pass
>>> class D(object): pass
>>> class C(D,F): pass
>>> class B(D,E): pass
>>> class A(B,C): pass
当你打印A.__mro__时可以看到输出结果为:
(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>, <class '__main__.E'>, <class '__main__.F'>, <class 'object'>)
- 在搜索方法时,是按照 mro 的输出结果 从左至右 的顺序查找的
- 如果在当前类中 找到方法,就直接执行,不再搜索
- 如果没有找到,就查找下一个类 中是否有对应的方法,如果找到,就直接执行,不再搜索
- 如果找到最后一个类,还没有找到方法,程序报错
多重继承中的菱形继承问题
refer:
https://blog.csdn.net/qq_26442553/article/details/81775449