python中的多繼承

2022-05-05 09:18:08 字數 868 閱讀 7073

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

class p1 #(object): 

def foo(self):

print 'p1-foo'

class p2 #(object):

def foo(self):

print 'p2-foo'

def bar(self):

print 'p2-bar'

class c1 (p1,p2):

pass

class c2 (p1,p2):

def bar(self):

print 'c2-bar'

class d(c1,c2):

pass

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

1、經典類

d=d() 

d.foo() # 輸出 p1-foo

d.bar() # 輸出 p2-bar

d=d() 

d.foo() # 輸出 p1-foo

d.bar() # 輸出 c2-bar

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

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

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

可以呼叫類的__mro__屬性來檢視查詢順序

link:

Python中的多繼承

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

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