總結(jié)python實現(xiàn)父類調(diào)用兩種方法的不同
python中有兩種方法可以調(diào)用父類的方法:
super(Child, self).method(args)
Parent.method(self, args)
我用其中的一種報了如下錯誤:

找不到 classobj。當我把調(diào)用改為 super(B, self).f(name) 就能正確運行,且結(jié)果正確。
分析錯誤
因為基類沒有繼承 object , 在python中,一個可以這樣創(chuàng)建:
class A: pass
也可以這樣創(chuàng)建:
class A(object): pass
這兩者的區(qū)別就是:

這是老式類(前者)和新式類(后者)的區(qū)別。區(qū)別可以參考:https://docs.python.org/release/2.5.2/ref/node33.html
python3已經(jīng)把舊類型去掉了,也就是說已經(jīng)隱式繼承了object,所以,python3中寫不寫繼承object都是沒有區(qū)別的
兩種調(diào)用的區(qū)別
Parent.__init__(self) 與 super(Child, self).__init__() 的區(qū)別是什么?
super 理解成父類也是理所當然,python里其實指的是 MRO 中的下一個類!
super其實干了這件事,看這個答案:
def super(cls, inst): mro = inst.__class__.mro() # Always the most derived class return mro[mro.index(cls) + 1]
MRO 全稱 Method Resolution Order,它代表了類繼承的順序。
super 是用來解決多重繼承問題的,假設(shè)B C D 都是直接繼承class A
class E(B, C, D): def __init__(self): # code...
如果E類的構(gòu)造函數(shù)使用 super(E, self).__init__() 時,A類的構(gòu)造函數(shù)會被執(zhí)行一次,而用另一種方法,A類的構(gòu)造函數(shù)會被執(zhí)行多次。
在 MRO 中,基類永遠出現(xiàn)在派生類后面,如果有多個基類,基類的相對順序保持不變。
總結(jié)
個人覺得,復(fù)雜的繼承結(jié)構(gòu)是設(shè)計中不良的設(shè)計,當繼承結(jié)構(gòu)清晰后,兩個方法其實就沒什么區(qū)別了。以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助。
相關(guān)文章
Python統(tǒng)計某列不同值的個數(shù)的示例代碼
在數(shù)據(jù)分析和數(shù)據(jù)處理中,統(tǒng)計數(shù)據(jù)往往集中在特定列中不同值的出現(xiàn)次數(shù),本文主要介紹了Python統(tǒng)計某列不同值的個數(shù)的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-03-03
python?Prophet時間序列預(yù)測工具庫使用功能探索
Python?Prophet是一個強大的時間序列預(yù)測工具,由Facebook開發(fā),具有易用性和高度可定制性的特點,本文將深入介紹Python?Prophet的基本概念、安裝方法以及如何使用它進行時間序列預(yù)測,并提供豐富的示例代碼來幫助大家入門2024-01-01
Python使用sys.exc_info()方法獲取異常信息
這篇文章主要介紹了Python使用sys.exc_info()方法獲取異常信息,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07
Python實現(xiàn)Linux監(jiān)控的方法
本文通過實例代碼給大家介紹了Python實現(xiàn)Linux監(jiān)控的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05
python?實現(xiàn)銀行卡號查詢銀行名稱和簡稱功能
這篇文章主要介紹了python?實現(xiàn)銀行卡號查詢銀行名稱和簡稱功能,本文通過實例代碼補充介紹了基于PyQT5+OpenCv實現(xiàn)銀行卡號識別功能,感興趣的朋友一起看看吧2023-11-11
Python協(xié)程 yield與協(xié)程greenlet簡單用法示例
這篇文章主要介紹了Python協(xié)程 yield與協(xié)程greenlet簡單用法,簡要講述了協(xié)程的概念、原理,并結(jié)合實例形式分析了Python協(xié)程 yield與協(xié)程greenlet基本使用方法,需要的朋友可以參考下2019-11-11
python簡單幾步實現(xiàn)時間日期處理到數(shù)據(jù)文件的讀寫
這篇文章主要為大家介紹了python簡單幾步實現(xiàn)時間日期處理到數(shù)據(jù)文件的讀寫詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04

