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