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