1. 程式人生 > >5、在多繼承背景下的屬性查詢

5、在多繼承背景下的屬性查詢

 

#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())