最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文詳解python多繼承的3C算法

 更新時間:2024年07月01日 09:26:24   作者:小明同學(xué)LukeLiang  
有很多地方都說python多繼承的繼承順序,是按照深度遍歷的方式,其實python多繼承順序的算法,不是嚴(yán)格意義上的深度遍歷,而是基于深度遍歷基礎(chǔ)上優(yōu)化出一種叫3C算法,本文將給大家詳細(xì)的介紹一下python多繼承的3C算法,需要的朋友可以參考下

python多繼承的3C算法

有很多地方都說python多繼承的繼承順序,是按照深度遍歷的方式,其實python多繼承順序的算法,不是嚴(yán)格意義上的深度遍歷,而是基于深度遍歷基礎(chǔ)上優(yōu)化出一種叫3C算法

python多繼承的深度遍歷

class C:
    def run(self):
        print("這個是C類的方法");
    pass;

class A(C):
    # def run(self):
    #     print("這個是A類的方法");
    pass;


class B:
    def run(self):
        print("這個是B類的方法");



class MainC(A,B):
    pass;
    # def run(self):
    #     print("這個是子類的方法");


m1 = MainC();
m1.run();
print(MainC.mro())

這段代碼輸出的結(jié)果就是 這個是C類的方法 [<class 'main.MainC'>, <class 'main.A'>, <class 'main.C'>, <class 'main.B'>, <class 'object'>]

每個類如果沒有繼承其他類的話就默認(rèn)繼承object這個基類 這個是比較正常的多繼承,然后是深度遍歷的方式

重復(fù)繼承的問題

基于上面改造一下

class C:
    def run(self):
        print("這個是C類的方法");
    pass;

class A(C):
    # def run(self):
    #     print("這個是A類的方法");
    pass;


class B(C):
    def run(self):
        print("這個是B類的方法");



class MainC(A,B):
    pass;
    # def run(self):
    #     print("這個是子類的方法");


m1 = MainC();
m1.run();
print(MainC.mro())

這個繼承順序就有意思了,main繼承A和B,A繼承C,B也繼承C,這就出現(xiàn)了重復(fù)繼承的問題,那這種情況python是如何決定繼承順序的呢 輸出結(jié)果:

這個是B類的方法
[<class '__main__.MainC'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class 'object'>]

這個結(jié)果就出乎意料了,因為按照深度遍歷的方式的話,也應(yīng)該繼承C再繼承B,但是卻不是這樣的 這個是因為python對于重復(fù)繼承的處理,按照這個繼承方式的話繼承順序是這樣的 mianC先繼承A,然后到查看C的情況,發(fā)現(xiàn)C同時被A和B繼承了,然后就先不處理,接著繼承B,然后看C的時候發(fā)現(xiàn),沒有其他的繼承了,就接著繼承C

更加復(fù)雜的繼承

class F:
    def run(self):
        print("這個是F類的方法");
    pass;

class G:
    def run(self):
        print("這個是G類的方法");
    pass;

class E(F,G):
    def run(self):
        print("這個是E類的方法");
    pass;

class C(E):
    def run(self):
        print("這個是C類的方法");
    pass;
class D(E):
    def run(self):
        print("這個是D類的方法");

class A(C):
    # def run(self):
    #     print("這個是A類的方法");
    pass;

class B(D):
    def run(self):
        print("這個是B類的方法");

class MainC(A,B):
    pass;
    # def run(self):
    #     print("這個是子類的方法");


m1 = MainC();
m1.run();
print(MainC.mro())

繼承順序:

[<class '__main__.MainC'>, <class '__main__.A'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.E'>, <class '__main__.F'>, <class '__main__.G'>, <class 'object'>]

這個就是跟復(fù)雜的多繼承了,但是只要用到上面說的邏輯去推理就知道繼承順序了 mainc先繼承A,然后看C,沒有被重復(fù)繼承,就繼承C,再看E,E被重復(fù)繼承了,先不處理,再從上面開始看,看B,沒有被重復(fù)繼承,再看D也沒有被重復(fù)繼承,直接繼承,再看E,也沒有其他的再繼承了就可以直接繼承,然后再看F,沒有重復(fù)繼承,就繼承,再到G

這個就是實際上python多繼承順序的算法,如果單純說是深度遍歷,其實是不對的

注意

盡量不要用多繼承,盡量不要用多繼承,盡量不要用多繼承。 用多繼承會讓你的程序變得復(fù)雜又難讀,產(chǎn)生的bug也難查

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

相關(guān)文章

  • centos7中安裝python3.6.4的教程

    centos7中安裝python3.6.4的教程

    Python3.6.4官方版是一款在適合開發(fā)人員使用的windows系統(tǒng)上運(yùn)行的腳本語言工具,Python3.6.4官方版是目前程序設(shè)計從業(yè)者必學(xué)的語言之一。這篇文章給大家介紹了centos7中安裝python3.6.4的教程,感興趣的朋友一起看看吧
    2019-12-12
  • python獲取字符串中的email

    python獲取字符串中的email

    這篇文章主要介紹了python獲取字符串中的email,通過調(diào)用re庫,通過使用compile、findall獲取字符串中的email,下文詳細(xì)實現(xiàn)過程需要的小伙伴可以參考一下
    2022-03-03
  • python獲取本周、上周、本月、上月及本季的時間代碼實例

    python獲取本周、上周、本月、上月及本季的時間代碼實例

    這篇文章主要給大家介紹了關(guān)于python獲取本周、上周、本月、上月及本季的時間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python實現(xiàn)Oracle查詢分組的方法示例

    python實現(xiàn)Oracle查詢分組的方法示例

    這篇文章主要介紹了python實現(xiàn)Oracle查詢分組的方法,結(jié)合實例形式分析了python使用group by子句及having子句實現(xiàn)Oracle查詢分組的相關(guān)操作技巧,需要的朋友可以參考下
    2020-04-04
  • C++與Python混合編程實戰(zhàn)(附詳細(xì)示例)

    C++與Python混合編程實戰(zhàn)(附詳細(xì)示例)

    這篇文章主要介紹了C++與Python混合編程的相關(guān)資料,通過將 Python 與 C/C++ 混合編程,可以有效提高關(guān)鍵任務(wù)的執(zhí)行效率,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-10-10
  • Python可迭代對象與迭代器的用法及說明

    Python可迭代對象與迭代器的用法及說明

    文章主要介紹了迭代器和可迭代對象的概念、Python中如何判斷一個對象是否可迭代、序列為什么可迭代、如何使用iter()函數(shù)處理可調(diào)用對象、Python中迭代器的接口以及Sentence類的迭代器實現(xiàn)
    2026-04-04
  • Python發(fā)送郵件封裝實現(xiàn)過程詳解

    Python發(fā)送郵件封裝實現(xiàn)過程詳解

    這篇文章主要介紹了Python發(fā)送郵件封裝實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 利用python爬取斗魚app中照片方法實例

    利用python爬取斗魚app中照片方法實例

    最近在學(xué)習(xí)python,通過實踐是學(xué)習(xí)的一個好辦法,下面這篇文章就來給大家介紹了關(guān)于利用python爬取斗魚app中照片的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友下面來一起看看吧。
    2017-12-12
  • Python處理百萬級社保數(shù)據(jù)的性能優(yōu)化秘籍

    Python處理百萬級社保數(shù)據(jù)的性能優(yōu)化秘籍

    這篇文章主要為大家詳細(xì)介紹了Python處理百萬級社保數(shù)據(jù)的性能優(yōu)化技巧,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-01-01
  • 解決使用PyCharm時無法啟動控制臺的問題

    解決使用PyCharm時無法啟動控制臺的問題

    今天小編就為大家分享一篇解決使用PyCharm時無法啟動控制臺的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01

最新評論

临桂县| 商洛市| 水城县| 寿宁县| 博兴县| 德格县| 进贤县| 会泽县| 万盛区| 临猗县| 抚远县| 颍上县| 张北县| 通辽市| 连江县| 玉溪市| 马边| 临桂县| 通渭县| 高密市| 万州区| 阿图什市| 莱芜市| 吉首市| 垣曲县| 西充县| 丘北县| 日照市| 阿拉善盟| 桑日县| 巴中市| 永康市| 湾仔区| 常德市| 军事| 怀柔区| 庆云县| 南平市| 开封县| 芷江| 乡城县|