Python语言支持多重继承,一个子类能够有多个"直接父类",这样就具有了"多个父类"的方法和属性。
好处: 让咱们的类定义的很是灵活 。
坏处: 会破坏"类的总体层次",搞得异常复杂。
因为绝大多数状况下,单继承的方式就能够知足咱们的需求,同时也是为了咱们程序的可读性,稳定性,尽可能避免使用。 python
当使用多重继承,可能造成复杂的网状结构,以下图: git
因为建议在实际的生产中,不使用多重继承的功能,虽然多重继承的知识点有不少,咱们也只是点到为止。
多重继承示例代码:github
class A: def aa(self): print("aa") class B: def bb(self): print("bb") class C(B, A): def cc(self): print("cc") c = C() c.aa() c.bb() c.cc()
运行结果:markdown
aa bb cc
程序说明:ide
构成以下继承结构示意图: spa
使用多继承的时候,若是父类中有相同名字的方法,在子类没有指定父类名时,解释器将"从左到右"按顺序搜索。
MRO(Method Resolution Order):方法解析顺序。咱们能够经过mro方法()得到类的层次结构,这个在前面说类继承的时候,已经有介绍,详细内容能够参考前面的介绍。方法解析顺序也是按照这个"类的层次结构"寻找的。 code
示例代码:视频
class A: def say(self): print("aaa") class B: def say(self): print("bbb") class C(A, B): pass class D(B, A): pass c = C() print(C.mro()) c.say() print('--' * 20) d = D() print(D.mro()) d.say()
运行结果:blog
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>] aaa ---------------------------------------- [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>] bbb
程序说明:继承
say()
say()
say()
方法say()
方法。c.say()
,发现的二者顺序是一致的,同理对应类D的操做。备注:
更多精彩博客,请访问: 聂发俊的技术博客
对应视频教程,请访问: python400
完整markdown笔记,请访问: python400_learn_github