Python 多繼承中MRO順序

2021-10-10 06:26:36 字數 1530 閱讀 3406

"""

在python3 裡面,使用super當有多繼承的情況出現的時候,有時候會出現呼叫父類init呼叫不到,

因為在python3 裡面有乙個預設來處理類之間呼叫順序的c3 演算法,c3用來保證每個類只呼叫一次的演算法,所有通過super 來進行呼叫的時候都會根據裡面的順序來進行呼叫

在類中可以通過 class.__mro__ 來獲得當前類中繼承呼叫的順序

"""class

parent

(object):

def__init__

(self, name,

*args,

**kwargs)

:print

("parent 被呼叫"

) self.name = name

print

("parent 呼叫結束"

)class

son1

(parent)

:def

__init__

(self, name, age,

*args,

**kwargs)

:print

("son1被呼叫"

) self.age = age

super

(son1, self)

.__init__(name,

*args,

**kwargs)

print

("son1呼叫結束"

)class

son2

(parent)

:def

__init__

(self, name, gender,

*args,

**kwargs)

:print

("son2被呼叫"

) self.gender = gender

super

(son2, self)

.__init__(name,

*args,

**kwargs)

print

("son2呼叫結束"

)class

grandson

(son1, son2)

:def

__init__

(self, name, age, gender,

*args,

**kwargs)

:print

("grandson 被呼叫"

)super

(grandson, self)

.__init__(name, age, gender,

*args,

**kwargs)

print

("grandson呼叫結束"

)if __name__ ==

'__main__'

:print

(grandson.__mro__)

grandson(

"張三",13

,"男"

)

多繼承中MRO順序詳解

1.單繼承 子類呼叫父類的方法的方式 1.super init 2.parent.init self 3.super 類名,self init 單繼承中,使用父類名與super 呼叫父類的方法效果是一致的,沒有區別 2.多繼承中使用父類名呼叫父類的方法 多繼承中使用父類名呼叫父類的方法會出現父類的方...

多繼承以及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 這種方式容易造成父類方法被呼叫多次的問題 菱形...