Python中的多繼承和super

2021-10-03 18:07:45 字數 1599 閱讀 4774

**簡單,定義四個類,a,b,c,d,其中d繼承自b和c,而b,c繼承自a,從第一步開始看

classa:

defrun

(self)

:# 第五步,列印如下print語句,此時self也是d類的例項物件

print

(f'a哈哈'

)class

b(a)

:def

run(self)

:# 第三步,首先列印print語句,此時self是d類的例項物件,然後呼叫父類的run方法

# 因為self是d類的例項物件,而且b父類的run方法已經呼叫過

# 所以此時再呼叫父類方法呼叫的是c類的run方法,然後程式移到第四步

print

(f'b哈哈'

)super()

.run(

)class

c(a)

:def

run(self)

:# 第四步,首先列印print語句,然後呼叫父類方法

# 此時self也是d類的例項物件,而且b類和c類等父類已經呼叫過

# 所以會繼續向上尋找父類,即會呼叫a類的run方法,然後程式移到第五步

print

(f'c哈哈'

)super()

.run(

)class

d(b, c)

:def

run(self)

:# 第二步,列印print語句,然後呼叫父類run方法,此時呼叫的是b父類中的run方法

# 因為d類第乙個父類是b類

# 然後程式會移動第三步

print

(f'd哈哈'

)super()

.run(

)d = d(

)# 第一步,呼叫d類中的run方法,然後程式會移到第二步

d.run(

)

輸出結果如下

d哈哈<__main__.d object at 0x000001bfa761aac8

>

b哈哈<__main__.d object at 0x000001bfa761aac8

>

c哈哈<__main__.d object at 0x000001bfa761aac8

>

a哈哈<__main__.d object at 0x000001bfa761aac8

>

使用__mro__

print

(d.__mro__)

在本例中,輸出結果如下

(

<

class

'__main__.d'

>

,<

class

'__main__.b'

>

,<

class

'__main__.c'

>

,<

class

'__main__.a'

>

,<

class

'object'

>

)

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