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

2021-08-29 12:24:13 字數 842 閱讀 5207

在菱形多繼承中,如果用父類.__init__()來呼叫父類的初始化方法,最上層會執行兩次,所以遇到這種情況,python中用super.__init__()來解決這個問題。

class grand_father(object):

def __init__(self):

print('爺爺')

class father_left(grand_father):

def __init__(self):

super(father_left,self).__init__()

# grand_father.__init__(self)

print('左邊爸爸')

class father_right(grand_father):

def __init__(self):

super(father_right, self).__init__()

# grand_father.__init__(self)

print('右邊爸爸')

class me(father_right,father_left):

def __init__(self):

super(me, self).__init__()

# father_left.__init__(self)

# father_right.__init__(self)

print('我')

def main():

me = me()

if __name__ == '__main__':

main()

如果需要呼叫左邊爸爸,那就執行super(右邊爸爸類).

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

python中的多繼承,鑽石繼承 查詢屬性的過程 簡單版本 詳細過程可以參考python參考手冊 舊式類中,從左到右,從b a 然後繼續從c a 新式類中,從左到右,先b 然後c c 後面沒有其他類了,繼續從b的父類開始,等b父類搜尋完,搜尋c的父類 其中的原因簡單解釋下 低層的類較高層的類相比,或...

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 2 include3 u...