Python中的多繼承

2021-07-24 21:33:42 字數 1021 閱讀 8219

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

class

p1 #(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

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

1、經典類

d=d() 

d.foo() # 輸出 p1-foo

d.bar() # 輸出 p2-bar

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

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

2、新式類

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

d=d() 

d.foo() # 輸出 p1-foo

d.bar() # 輸出 c2-bar

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

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

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

原文出處

python中的多繼承

一 介紹 python同樣有限的支援多繼承形式。多繼承的類定義形如下例 class derivedclassname base1,base2,base3 需要注意圓括號中父類的順序,若是父類中有相同的方法名,而在子類使用時未指定,python從左至右搜尋 即方法在子類中未找到時,從左到右查詢父類中是...

Python中的多繼承

coding utf8 1.多繼承 子類有多個父類 class human def init self,self.defp self print 這是human的方法 class person def init self,name self.name name defp self print 這是p...

python中的多繼承

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