日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python類的繼承super相關原理解析

瀏覽:188日期:2022-07-07 14:31:02

看了網上許多關于super、mro、C3的介紹感覺沒有一份很容易初學者理解的文檔,直接看C3算法的話,比較難理解,也沒必要,如果掌握一套規律的話,會輕松許多。我將網上這些博主的文章進行一個梳理總結,最后形成一套實用的關于super、mro、C3的理解介紹。

1、super

super()是一種將子類與父類聯系起來的一種方法,子類通過繼承父類,可以使用父類的方法和屬性,也可以自己定義屬于自己的方法和屬性。super方法主要用在多繼承中,在單繼承時直接調用父類方法即可

下面這個是SGD源碼的一部分,根據這份源碼,

class SGD(Optimizer): def __init__(self, params, lr=required, momentum=0, dampening=0, weight_decay=0, nesterov=False): defaults = dict(lr=lr, momentum=momentum, dampening=dampening, weight_decay=weight_decay, nesterov=nesterov) if nesterov and (momentum <= 0 or dampening != 0): raise ValueError('Nesterov momentum requires a momentum and zero dampening') super(SGD, self).__init__(params, defaults) def __setstate__(self, state): super(SGD, self).__setstate__(state) for group in self.param_groups: group.setdefault(’nesterov’, False)

這是SGD類中的代碼

有2點需要補充說明:

1、super聯系父類的時候,需要調用父類的方法,包括所帶的形參寫完整,子類不夠的形參需要額外加上

2、super聯系父類的時候,不只是可以調用__init__,而且還可以調用父類其他的方法

3、python3可以寫成super().__init__()這種寫法了。

4、類都默認繼承object類

另外,在super的使用過程中,還需要注意初始化對繼承的影響:

1、子類繼承父類,但不執行__init__方法,那么會自動繼承父類屬性。

2、子類繼承父類,執行了__init__方法,且不調用super初始化父類構造函數,那么子類不會自動繼承父類屬性。

3、子類繼承父類,執行了__init__方法,且調用了super初始化了父類的構造函數,那么子類會繼承父類屬性。

2、mro

Python的MRO,方法解析順序,即在調用方法時,會對當前類以及所有的基類進行一個搜索,以確定該方法之所在,而這個搜索的順序就是MRO。然后python會按照這個順序去執行類之間的調用問題。

直接上例子

class A1(): def __init__(self): print(’A1’) super().__init__()class A2(): def __init__(self): print(’A2’) super().__init__()class A3(): def __init__(self): print(’A3’) super().__init__()class B1(A1, A2): def __init__(self): print(’B1’) super().__init__()class B2(A2): def __init__(self): print(’B2’) super().__init__()class B3(A2, A3): def __init__(self): print(’B3’) super().__init__()class C1(B1): def __init__(self): print(’C1’) super().__init__()class C2(B1, B2): def __init__(self): print(’C2’) super().__init__()class C3(B2, B3): def __init__(self): print(’C3’) super().__init__()class D(C1, C2, C3): def __init__(self): print(’D’) super().__init__()d = D()print(D.__mro__)

輸出如下:

Python類的繼承super相關原理解析

(<class ’__main__.D’>, <class ’__main__.C1’>, <class ’__main__.C2’>, <class ’__main__.B1’>, <class ’__main__.A1’>, <class ’__main__.C3’>, <class ’__main__.B2’>, <class ’__main__.B3’>, <class ’__main__.A2’>, <class ’__main__.A3’>, <class ’object’>)

那么這個程序是按怎么個順序依次去執行那些方法呢,就是按照MRO中的順序。

Python類的繼承super相關原理解析

那么這個順序如何自己手寫出來呢?這就是C3算法,用于計算出MRO,得出執行順序

3、c3算法

但是我在這里想告訴大家如何根據C3算法找出規律,從而自己寫出順序

還是上手例子,根據上面這個圖,我們可以列出下面這個表,這個表示網上一個博主做的,可以說做出這張表就是做出了答案,那這張表“實際取出的類”怎么推出來的呢?我拿過來提煉出一些比較直接的規律

Python類的繼承super相關原理解析

規律1:預查找父類按左邊優先原則,比如第一行,當前類D的預查找父類選最左邊的C1,而不是C2、C3。

規律2:當“預查找父類是否還有其他子類?同時又是最底層查找類的父類或父父類、父父父...類”沒有的時候,直接選取預查找父類作為答案。當這項有類的時候,若“最底層的未查找父類”還有,則優先選它,若沒有了,則選取這項類作為答案。

規律3:當預查找父類是object,只要最底層的未查找父類還有,就選這個最底層的未查找父類。若沒有,則“預查找父類是否還有其他子類?同時又是最底層查找類的父類或父父類、父父父...類”有類的時候,就選這個類,沒有的話,答案就是object

另外,

如何去畫圖:

1、子類永遠畫在父類的下面,并用有向箭頭指向父類

2、遇到多繼承則按代碼中繼承列表的順序從左往右寫。如果有多個子類繼承了同一個父類,那么這個父類則放在它能夠出現的所有位置中最左的位置。需遵循圖里面的廣度優先原則進行遍歷(在廣度優先原則的前提下又優先遍歷左邊的):

練習:

下面這個是網上的一份代碼,看懂上面的規律以及如何畫有向圖之后,就可以順利得出MRO的值了

class A: def __init__(self): print(’A’) class B(A): def __init__(self): print(’B’) super().__init__()class C(A): def __init__(self): print(’C’) super().__init__()class D(A): def __init__(self): print(’D’) super().__init__() class E(B, C): def __init__(self): print(’E’) super().__init__()class F(C, D): def __init__(self): print(’F’) super().__init__()class G(E, F): def __init__(self): print(’G’) super().__init__()

首先,畫圖

Python類的繼承super相關原理解析

然后列表

當前類最底層未查找的父類預查找的父類預查找父類是否為object預查找父類是否有其他子類,同時又是最底層查找類的父類、父父類實際取出的類GE、FEnonoEEFBnonoBBFAno有,CFFnoCnonoCCnoAno有,DDDnoAnonoAAnoobjectyesnoobject

答案:

mro:GEBFC

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲三级国产| 亚洲精品美女| 亚洲1区在线| 午夜国产精品视频免费体验区| 欧美日本精品| 国产乱码精品| 亚洲欧美在线专区| 制服诱惑一区二区| 精品国产aⅴ| 日韩精品亚洲一区二区三区免费| 在线看片日韩| 国产亚洲综合精品| 在线日韩电影| 色天使综合视频| 久久高清免费| 日韩在线短视频| 色综合五月天| 亚洲深夜视频| 不卡av一区二区| 亚洲在线观看| 国产拍在线视频| 国产精品流白浆在线观看| 日韩国产欧美三级| 美女国产一区| 日韩福利视频导航| а√天堂8资源在线| 欧美国产极品| 欧美成人久久| 欧美另类专区| 亚洲一区久久| 亚洲精品精选| 国产精品传媒麻豆hd| 国产精品一站二站| 久久gogo国模啪啪裸体| 精品视频一区二区三区在线观看| 国产精品theporn| 久久精品国语| 一区免费在线| 五月综合激情| 亚洲一区有码| 九九久久电影| 免费在线观看视频一区| 日韩精品欧美大片| 国产极品嫩模在线观看91精品| 美女精品久久| 欧美日韩激情| 水野朝阳av一区二区三区| 亚洲无线观看| 国产精品videossex久久发布 | 久久这里只有| bbw在线视频| 久久亚洲风情| 久久精品国产福利| 精品日韩视频| 国产精品xxxav免费视频| 午夜视频精品| 久久精品国产精品亚洲毛片| 综合视频一区| 日本一区中文字幕| 久久精品99久久久| 五月激情久久| 久久av在线| 午夜精品网站| 国产精品v亚洲精品v日韩精品| 日韩精品一卡| 国产精品久久久久久久久久齐齐| 国产精品88久久久久久| 国产精品久久久免费| 在线亚洲激情| 麻豆mv在线观看| 欧美一区不卡| 欧美+日本+国产+在线a∨观看| 国产精品一区二区精品视频观看| 一区免费在线| 日韩成人亚洲| 久久精品理论片| 日韩毛片一区| 亚洲美洲欧洲综合国产一区| 国产精品久一| 综合日韩在线| 红桃视频国产精品| 欧美男人天堂| 久久精品国产免费| 日本午夜精品一区二区三区电影 | 日韩成人一级| 亚洲一区观看| 99精品小视频| 成人精品久久| 国产精品天堂蜜av在线播放| 中文字幕亚洲精品乱码| 日韩国产一区| 精品三级国产| 欧美激情福利| 欧美亚洲一区二区三区| 综合国产精品| 免费在线视频一区| 一区二区自拍| 国产一区日韩一区| 日韩欧美一区二区三区免费观看| 久久精品一区二区三区中文字幕| 欧美一区91| 午夜性色一区二区三区免费视频| 在线综合视频| 亚洲激情不卡| 午夜视频精品| 九九久久电影| 亚洲国产一区二区在线观看| 久久久久久美女精品| 国产在线|日韩| 蜜臀国产一区| 天堂av在线| 天堂中文在线播放| 欧美三级精品| 日韩精品水蜜桃| 91精品一区国产高清在线gif | 999国产精品| 99久久夜色精品国产亚洲1000部| 国产中文在线播放| 色综合狠狠操| 精品欧美一区二区三区在线观看| 日韩av福利| 久久精品官网| 午夜免费一区| 日韩中文欧美在线| 亚洲精品福利| 久久国内精品自在自线400部| 欧美在线91| 国产精品任我爽爆在线播放| 欧美国产先锋| 国产不卡一区| 999国产精品永久免费视频app| 亚洲婷婷免费| 国产农村妇女精品一二区| 美女少妇全过程你懂的久久| 中文久久精品| 亚洲一二av| 国产午夜久久av| 国产精品jk白丝蜜臀av小说| 久久这里只有| 综合日韩av| 欧美日韩黑人| 一区二区三区网站| 日韩国产成人精品| 免费一区二区三区在线视频| 综合日韩av| 精品欧美久久| 免费一级片91| 国产精品美女午夜爽爽| 麻豆免费精品视频| 亚洲涩涩在线| 伊人精品视频| 欧美精品中文| 成人高清一区| 亚洲激情中文在线| 日本亚洲不卡| 福利精品在线| 国产日韩综合| 国产精品一区高清| 国产美女高潮在线| 99在线|亚洲一区二区| 欧美亚洲三区| 日韩精品专区| 亚洲ww精品| 欧美黄色精品| 激情综合自拍| 欧美片网站免费| 韩国精品主播一区二区在线观看| 亚洲欧美日韩精品一区二区| 国产欧美日韩视频在线| 久久精品亚洲人成影院| 石原莉奈在线亚洲二区| 国产精久久久| 亚洲婷婷在线| 日本少妇一区二区| 日韩大片在线观看| 亚洲精品乱码日韩| 国产精品99一区二区三区| 亚洲成av人片一区二区密柚| 午夜一级久久| 久久精品免费看| 久久高清一区| 国产在线日韩精品| 中文无码日韩欧| 91一区二区三区四区| 男女精品网站| 色一区二区三区四区| 亚洲精品极品| 欧美sss在线视频| 日韩av网站在线观看| 久久精品1区| 国产精品天天看天天狠| 亚洲少妇在线| 超碰99在线| 中文字幕av亚洲精品一部二部| 91麻豆国产自产在线观看亚洲| 综合欧美精品| 播放一区二区| 国产精品久久免费视频| 日韩一级欧洲| 日韩av福利|