python中的多繼承,鑽石繼承,搜尋過程

2021-08-20 14:55:20 字數 771 閱讀 4309

#python中的多繼承,鑽石繼承

#查詢屬性的過程:簡單版本 , 詳細過程可以參考python參考手冊

#舊式類中,從左到右,從b->a ,然後繼續從c->a

#新式類中,從左到右,先b , 然後c ,c 後面沒有其他類了,繼續從b的父類開始,等b父類搜尋完,搜尋c的父類

#其中的原因簡單解釋下 ,低層的類較高層的類相比,或許低層類中的屬性是使用者更想要的

#解決多繼承中的衝突,2種方式,簡單的方式就是明確的定義 ,比如在類中新增乙個屬性 attr = superclass.attr

class a:

attr = 1

def method(self):

print( "函式*:%s"%(self.method.__func__))

class b(a):

pass

class c(a):

attr = 2

def method(self):

print("函式*:%s" % (self.method.__func__))

class d(b,c):

pass

#想要解決衝突的乙個簡單辦法:

#attr = b.attr

#函式(方法)也可以這樣使用

#method = a.method

#一種更通用的方式:

#def method(self): a.method(self)

x = d()

x.method()

python多繼承 鑽石繼承 的問題和解決

在菱形多繼承中,如果用父類.init 來呼叫父類的初始化方法,最上層會執行兩次,所以遇到這種情況,python中用super.init 來解決這個問題。class grand father object def init self print 爺爺 class father left grand f...

python之路 鑽石繼承

繼承順序 class a object deftest self print from a class b a deftest self print from b class c a deftest self print from c class d b deftest self print fro...

C 中的多重繼承 鑽石繼承和虛繼承

多重繼承 鑽石繼承 虛繼承 1 多重繼承 在c 中子類可以有多個父類,按照繼承表的順序繼承父類中的所有成員,並按照繼承表呼叫父類的建構函式。在子類中按照繼承順序排列父類,並且會標記每個父類的位置。當父類的指標或引用指向子類物件時,編譯器會自動計算出父類在子類中的位置。2 鑽石繼承 假如乙個子類繼承了...