1. 程式人生 > >Python新式類繼承順序

Python新式類繼承順序

檢查 合並 -a 定義 AD 技術 pla pen idt

繼承順序

廣度優先原則:

技術分享圖片

技術分享圖片
class A:
    pass


class B(A):
    pass

class C(A):
     pass


class D(B):
    pass

class E(C):
    pass

class F(D, E):
    pass


print("F.__mro__ = ", F.__mro__)
print("F.mro() = ", F.mro())
View Code

繼承原理

python到底是如何實現繼承的:

  • 對於定義的每一個類,python會計算出一個方法解析順序(MRO)列表,這個MRO列表就是一個簡單的所有基類的線性順序列表。
  • 為了實現繼承,python會在MRO列表上從左到右開始查找基類,直到找到第一個匹配這個屬性的類為止。
  • MRO列表的構造是通過一個C3線性化算法來實現的。我們不去深究這個算法的數學原理,它實際上就是合並所有父類的MRO列表並遵循如下三條準則:
  1. 子類會先於父類被檢查。
  2. 多個父類會根據它們在列表中的順序被檢查。
  3. 如果對下一個類存在兩個合法的選擇,選擇第一個父類。

技術分享圖片

Python新式類繼承順序