python中使用多繼承

2021-08-20 21:20:25 字數 895 閱讀 7661

python中使用多繼承,會涉及到查詢順序(mro)、重複呼叫(鑽石繼承,也叫菱形繼承問題)等

mromro即method resolution order,用於判斷子類呼叫的屬性來自於哪個父類。在python2.3之前,mro是基於深度優先演算法的,自2.3開始使用c3演算法,定義類時需要繼承object,這樣的類稱為新式類,否則為舊式類

從圖中可以看出,舊式類查詢屬性時是深度優先搜尋,新式類則是廣度優先搜尋

c3演算法最早被提出是用於lisp的,應用在python中是為了解決原來基於深度優先搜尋演算法不滿足本地優先順序,和單調性的問題。

示例看下面的例子

class

x(object):

deff(self):

print'x

'class

a(x):

deff(self):

print'a

'def

extral(self):

print

'extral a

'class

b(x):

deff(self):

print'b

'def

extral(self):

print

'extral b

'class

c(a, b, x):

deff(self):

super(c, self).f()

print'c

'print

c.mro()

c =c()

c.f()

c.extral()

根據廣度搜尋原則最先搜尋到a,所以結果很明顯,如下所示

類c沒有extral函式,呼叫的是子類的該函式。這種類的部分行為由父類來提供的行為,叫做抽象超類.

python入門 繼承 多繼承

定義 子類擁有父類的所有方法和屬性,子類可直接享受父類中封裝好的方法 語法 class 類名 父類名 pass繼承的傳遞性 c類繼承與b類,b類繼承於a類 覆蓋父類的方法 在子類中定義乙個和父類同名的方法並實現 super 函式 在重寫父類方法時,呼叫在父類中封裝的方法實現 例 def login ...

python 單繼承,多繼承

父類 class person def init self,name,age self.name name self.self.age age def introduce self print 父類方法person self.name 學生類 繼承 person class student pers...

python 多繼承 python 繼承之多繼承

class baserequest pass class requesthandler baserequest def serve forever self print requesthandler.serve forever self.process request def process req...