多繼承中MRO順序詳解

2021-08-28 04:18:46 字數 690 閱讀 2892

1. 單繼承

子類呼叫父類的方法的方式:

1. super().__init__()

2. parent.__init__(self)

3. super(類名,self).__init__()

單繼承中, 使用父類名與super()呼叫父類的方法效果是一致的,沒有區別

2. 多繼承中使用父類名呼叫父類的方法

多繼承中使用父類名呼叫父類的方法會出現父類的方法執行多次

3. 多繼承中使用super()呼叫父類的方法

- mro順序: method resolution order :

方法解決順序,方法解析順序用於描述在python多繼承中子類呼叫多個父類相同方法的順序,內部通過c3演算法去解析

- 類名.__mro__ : 用元組的形式存放子類物件呼叫多個父類相同方法的順序(mro演算法執行的結果)

- super()與類名.__mro__的關係:

supe0

小結:

1. 單繼承中,super().__init__相對於類名.__init__,基本無差別

2. 多繼承中,super方法能保證每個父類的方法只會執行一次,而使用類名的方法會導致方法被執行多次,在多繼承中,應用使用super來呼叫父類的方法

3. super()內部是通過mro演算法來確定呼叫哪個父類的方法

Python 多繼承中MRO順序

在python3 裡面,使用super當有多繼承的情況出現的時候,有時候會出現呼叫父類init呼叫不到,因為在python3 裡面有乙個預設來處理類之間呼叫順序的c3 演算法,c3用來保證每個類只呼叫一次的演算法,所有通過super 來進行呼叫的時候都會根據裡面的順序來進行呼叫 在類中可以通過 cl...

多繼承以及MRO順序

單獨呼叫父類的方法 print 多繼承使用類名.init發生的狀態 class parent object definit self,name print parent的init開始被呼叫 self.name name print parent的init結束被呼叫 class son1 parent...

多繼承以及MRO順序

個類同時繼承多個類,稱為多繼承。class 類名 類名1,類名2 多繼承關係中,當多個 類具有同名的成員,類調時該成員時先調 繼承關係中的第 個宣告的類的成員。多繼承指的是子類繼承多個父類,可以通過三種方式訪問父類的方法 1 父類名.父類方法 self 這種方式容易造成父類方法被呼叫多次的問題 菱形...