python的多繼承關係

2022-02-25 21:33:12 字數 1477 閱讀 8371

python和c++一樣,支援多繼承。概念雖然容易,但是困難的工作是如果子類呼叫乙個自身沒有定義的屬性,它是按照何種順序去到父類尋找呢,尤其是眾多父類中有多個都包含該同名屬性。

class p1 #

(object):

deffoo(self):

print

'p1-foo

'class p2 #

(object):

deffoo(self):

print

'p2-foo

'def

bar(self):

print

'p2-bar

'class

c1 (p1,p2):

pass

class

c2 (p1,p2):

defbar(self):

print

'c2-bar

'class

d(c1,c2):

pass

對經典類和新式類來說,屬性的查詢順序是不同的。現在我們分別看一下經典類和新式類兩種不同的表現

d=d() 

d.foo() # 輸出 p1-foo 

d.bar() # 輸出 p2-bar 

例項d呼叫foo()時,搜尋順序是 d => c1 => p1

例項d呼叫bar()時,搜尋順序是 d => c1 => p1 => p2

使用新式類要去掉第一段**中的注釋

class p1 :#

(object):新式類預設繼承object

deffoo(self):

print('

p1-foo')

class p2 : #

(object):

deffoo(self):

print('

p2-foo')

defbar(self):

print('

p2-bar')

class

c1(p1, p2):

pass

class

c2(p1, p2):

defbar(self):

print( '

c2-bar')

class

d(c1, c2):

pass

d=d()

d.foo()

#輸出 p1-foo

d.bar() #

輸出 p2-bar

print(d.__mro__)

d=d() 

d.foo() # 輸出 p1-foo 

d.bar() # 輸出 c2-bar 

例項d呼叫foo()時,搜尋順序是 d => c1 => c2 => p1

例項d呼叫bar()時,搜尋順序是 d => c1 => c2

可以看出,新式類的搜尋方式是採用「廣度優先」的方式去查詢屬性。

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...