5、在多繼承背景下的屬性查詢
阿新 • • 發佈:2018-11-30
#coding:utf-8 # 多繼承背景下屬性查詢的順序:物件-》物件的類-》按照從左往右的順序一個一個的分支找下去 # # #第四層 # class I: # # x='I' # pass # # #第三層 # # class E: # # x='E' # pass # # class F(I): # # x='F' # pass # # class H: # x='H' # # # 第二層 # class B(E): # # x='B' # pass# # class C(F): # # x='C' # pass # # class D(H): # # x='D' # pass # # #第一層 # class A(B,C,D): # # x='A' # pass # # obj=A() # # obj.x=111 # print(obj.x) # 一旦出現菱形繼承問題,新式類與經典類在屬性查詢上的區別是 # 新式類:廣度優先查詢,在最後一個分支查詢頂級類 # 經典類:深度優先查詢,在第一個分支就查詢頂級類 class G(object):# def test(self): # print('from G') pass # 第三層 class E(G): # def test(self): # print('from E') pass class F(G): def test(self): print('from F') pass # 第二層 class B(E): # def test(self): # print('from B') pass class C(F):def test(self): print('from C') pass class D(G): def test(self): print('from D') pass # 第一層 class A(B,C,D): # def test(self): # print('from A') pass obj=A() # obj.test() # 新式類:物件-》A-》B-》E-》C-》F-》D-G # 經典類:物件-》A-》B-》E-》G-》C-》F-》D #在新式類中,提供了一個mro方法 # print(A.mro())