在菱形多繼承中,如果用父類.__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...