python多繼承二義性

2021-09-25 22:06:53 字數 688 閱讀 6385

假如在多繼承中,父類a和父類b中有乙個同名的方法,子類呼叫的時候,呼叫哪個呢?

class base(object):

def test(self):

print('----base----')

class a(base):

def test(self):

print('----a----')

class b(base):

def test(self):

print('----b----')

class c(a, b):

pass

c = c()

c.test()

print(c.__mro__) # c類物件搜尋方法時的順序

發現呼叫a,那假如a沒有test()方法,是先呼叫b還是呼叫base呢?很多人認為會呼叫b,其實並不一定了,我可以使用python中__mro__方法來檢視c類搜尋方法時的順序:

列印發現a呼叫完之後確實呼叫b,但是這是不一定的,日後工作時怕出錯可以使用__mro__來檢視一下。__mro__是由c3演算法寫成,它決定著類搜尋方法時的先後順序,有興趣的可以去了解下c3演算法

C 多繼承的二義性

單繼承 派生類只從乙個基類派生 多繼承 派生類從多個基類派生 多重派生 有乙個基類派生出多個不同的派生類 多層派生 派生類又作為基類,繼續派生出新的類 多繼承可以看作是單繼承的擴充套件。所謂多繼承是指派生類具有多個基類,派生類與每個基類之間的關係仍可看作是乙個單繼承。多繼承下派生類的定義格式如下 c...

C 多繼承的二義性

多繼承可以看作是單繼承的擴充套件。所謂多繼承是指派生類具有多個基類,派生類與每個基類之間的關係仍可看作是乙個單繼承。多繼承下派生類的定義格式如下 class 派生類名 繼承方式1 基類名1 繼承方式2 基類名2 其中,繼承方式1 繼承方式2 是三種繼承方式 public private protec...

C 多繼承的二義性

多繼承可以看作是單繼承的擴充套件。所謂多繼承是指派生類具有多個基類,派生類與每個基類之間的關係仍可看作是乙個單繼承。多繼承下派生類的定義格式如下 class 派生類名 繼承方式1 基類名1 繼承方式2 基類名2 其中,繼承方式1 繼承方式2 是三種繼承方式 public private protec...