欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python類的多繼承的搜索順序

 更新時間:2024年03月31日 10:58:51   作者:琛cc  
python和C++一樣,支持多繼承,本文主要介紹了Python類的多繼承的搜索順序,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Python支持多繼承,而任何實現(xiàn)多繼承的語言都需要處理潛在的命名沖突,這種命名沖突是由不相關(guān)的祖先類實現(xiàn)同名方法引起,這種沖突就被稱為 菱形問題。

 需要聲明的是,在 Python3 中多繼承的搜索順序為:從左至右,廣度優(yōu)先;Python2采用的多繼承搜索順序為:從左至右,深度優(yōu)先。

一、首先,先來看一下菱形問題

它的繼承關(guān)系、代碼實現(xiàn)和運(yùn)行結(jié)果如下圖所示:

class A:
    def show(self):
        print('---A---')


class B(A):
    def fun(self):
        print('this is class B!')


class C(A):
    def fun(self):
        print('this is class C!')


class D(B, C):
    def show(self):
        super().show()   #--->1
        print('---D---')    

    def test(self):
        self.show()   #--->2
        super().show()   #--->3
        self.fun()  #--->4
        super().fun()   #--->5
        C.fun(self)   #---->6
        C.show(self)    #--->7


d = D()
d.show()
print('-----------------------------')
d.test()

  首先,創(chuàng)建D類的對象的d,然后調(diào)用其中的 show 方法,再調(diào)用 test 方法(以下序號在代碼中標(biāo)出):

1、調(diào)用 show 方法,由于類 D 實現(xiàn)了自己的 show 方法,則此時進(jìn)入 D 類的 show 方法,然后使用 super 方法調(diào)用了父類的 show方法,B、C類都沒有實現(xiàn)該方法,則繼續(xù)往上找,A 類中實現(xiàn)了 show 方法,則執(zhí)行該方法,再繼續(xù)向下執(zhí)行。

2、在 test 方法中首先調(diào)用了自己的 show 方法,則重復(fù)上一條的執(zhí)行順序。

3、此處調(diào)用父類的 show 方法,往上找A類中實現(xiàn)了 show 方法,則執(zhí)行該方法。

4、由于D類沒有 fun 方法,則根據(jù)搜索順序,B--->A,則執(zhí)行B類的 fun 方法。

5、調(diào)用父類的 fun 方法,搜索順序與上一條相同。

6、此處需要注意,直接在類上調(diào)用實例方法時,必須顯示的傳入?yún)?shù) self。

二、再來看一個例子,其繼承關(guān)系、代碼實現(xiàn)和運(yùn)行結(jié)果如下圖所示:

class A:
    pass


class B:
    pass


class C(A):
    pass


class D(A):
    pass


class E(B, C):
    pass


class G1(C, B, D):
    pass


class F1(D, B):
    pass


class F2(C, D):
    pass


class G2(C, D, B):
    pass


class G3(D, B, C):
    pass


print(C.__mro__)
print(D.__mro__)
print(E.__mro__)
print(F1.__mro__)
print(F2.__mro__)
print(G1.__mro__)
print(G2.__mro__)
print(G3.__mro__)

在這里,首先需要介紹一個類的屬性 __mro__ ,它的返回值是一個元組,可按照方法解析順序(由于Python會按照特定的順序遍歷繼承圖,這個順序成為方法解析順序)列出各個超類,從當(dāng)前類一直向上,知道 object 類。為了更加深入的說明問題,在代碼實現(xiàn)時,增加了幾個不同的繼承關(guān)系。從以上代碼中,可以得出以下結(jié)論:

1、類的多繼承與繼承的順序有關(guān),按照從左到右的順序,依次搜索。

2、繼承采用從左到右,廣度優(yōu)先順序進(jìn)行搜索,例如類 F2。

3、同一級別的父類搜索完之后,才繼續(xù)向上一級搜索,例如類 G1、G2、G3。

4、所有的繼承搜索順序到達(dá) object 類停止。

到此這篇關(guān)于Python類的多繼承的搜索順序的文章就介紹到這了,更多相關(guān)Python類多繼承順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實現(xiàn)簡單多人聊天室

    python實現(xiàn)簡單多人聊天室

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)簡單多人聊天室功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Python處理JSON數(shù)據(jù)并生成條形圖

    Python處理JSON數(shù)據(jù)并生成條形圖

    本文詳細(xì)介紹如何利用Python進(jìn)行數(shù)據(jù)分析,嘗試處理一份JSON數(shù)據(jù)并生成條形圖的過程,有需要的朋友們可以參考學(xué)習(xí)。
    2016-08-08
  • Python常用內(nèi)置函數(shù)總結(jié)

    Python常用內(nèi)置函數(shù)總結(jié)

    這篇文章主要介紹了Python常用內(nèi)置函數(shù)總結(jié),本文羅列了數(shù)學(xué)相關(guān) 、功能相關(guān)、類型轉(zhuǎn)換、字符串處理、序列處理函數(shù)等常用內(nèi)置函數(shù),需要的朋友可以參考下
    2015-02-02
  • Flask文件下載的三種方法

    Flask文件下載的三種方法

    在本文中,我們將介紹三種不同的方法,以便你能夠選擇最適合你應(yīng)用程序的方法,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • python微信撤回監(jiān)測代碼

    python微信撤回監(jiān)測代碼

    這篇文章主要為大家詳細(xì)介紹了python微信撤回監(jiān)測代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Pandas 數(shù)據(jù)處理,數(shù)據(jù)清洗詳解

    Pandas 數(shù)據(jù)處理,數(shù)據(jù)清洗詳解

    今天小編就為大家分享一篇Pandas 數(shù)據(jù)處理,數(shù)據(jù)清洗詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python使用tcp實現(xiàn)局域網(wǎng)內(nèi)文件傳輸

    python使用tcp實現(xiàn)局域網(wǎng)內(nèi)文件傳輸

    這篇文章主要介紹了python使用tcp實現(xiàn)局域網(wǎng)內(nèi)文件傳輸,文件包括文本,圖片,視頻等,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Pandas 解決dataframe的一列進(jìn)行向下順移問題

    Pandas 解決dataframe的一列進(jìn)行向下順移問題

    今天小編就為大家分享一篇Pandas 解決dataframe的一列進(jìn)行向下順移問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python基于回溯法解決01背包問題實例

    Python基于回溯法解決01背包問題實例

    這篇文章主要介紹了Python基于回溯法解決01背包問題,結(jié)合實例形式分析了Python回溯法采用深度優(yōu)先策略搜索解決01背包問題的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Python中__str__()方法的實用技巧分享

    Python中__str__()方法的實用技巧分享

    在Python編程中,__str__()是一個特殊方法,它允許自定義對象的字符串表示形式,本文將深入探討__str__()的相關(guān)實用技巧,希望對大家有所幫助
    2023-11-11

最新評論