python的類可以繼承多個類,如果繼承多個類,那么其尋找方法的方式有:深度優先和廣度優先
基類或者父類繼承了object類,那么該類就是新式類,否則便是經典類
當類是經典類時,多繼承情況下,會按照深度優先方法查找
當類時新式類時,多繼承情況下,會按照廣度優先方法查找
1 class A(object): 2 def test(self): 3 print('from A') 4
5 class B(A): 6 def test(self): 7 print('from B') 8
9 class C(A): 10 def test(self): 11 print('from C') 12
13 class D(B): 14 def test(self): 15 print('from D') 16
17 class E(C): 18 def test(self): 19 print('from E') 20
21 class F(D,E): 22 # def test(self):
23 # print('from F')
24 pass
25 f1=F() 26 f1.test() 27 print(F.__mro__) #只有新式才有這個屬性可以查看線性列表,經典類沒有這個屬性
新式類繼承順序:F->D->B->E->C->A
經典類繼承順序:F->D->B->A->E->C
python3中統一都是新式類
pyhon2中才分新式類與經典類
所有的父類的MRO列表遵循如下原則:
子類會先於父類被檢查;多個父類會根據它們在列表中的順序被檢查;如果對下一個類存在兩個合法的選擇,則選擇第一個類。