假如在多繼承中,父類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...