Python中super的用法實(shí)例
super 是用來(lái)解決多重繼承問(wèn)題的,直接用類(lèi)名調(diào)用父類(lèi)方法在使用單繼承的時(shí)候沒(méi)問(wèn)題,但是如果使用多繼承,會(huì)涉及到查找順序(MRO)、重復(fù)調(diào)用(鉆石繼承)等種種問(wèn)題。總之前人留下的經(jīng)驗(yàn)就是:保持一致性。要不全部用類(lèi)名調(diào)用父類(lèi),要不就全部用 super,不要一半一半。
普通繼承
class FooParent(object):
def __init__(self):
self.parent = 'I\'m the parent.'
print 'Parent'
def bar(self,message):
print message, 'from Parent'
class FooChild(FooParent):
def __init__(self):
FooParent.__init__(self)
print 'Child'
def bar(self,message):
FooParent.bar(self,message)
print 'Child bar function.'
print self.parent
if __name__=='__main__':
fooChild = FooChild()
fooChild.bar('HelloWorld')
super繼承
class FooParent(object):
def __init__(self):
self.parent = 'I\'m the parent.'
print 'Parent'
def bar(self,message):
print message,'from Parent'
class FooChild(FooParent):
def __init__(self):
super(FooChild,self).__init__()
print 'Child'
def bar(self,message):
super(FooChild, self).bar(message)
print 'Child bar fuction'
print self.parent
if __name__ == '__main__':
fooChild = FooChild()
fooChild.bar('HelloWorld')
程序運(yùn)行結(jié)果相同,為:
Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.
從運(yùn)行結(jié)果上看,普通繼承和super繼承是一樣的。但是其實(shí)它們的內(nèi)部運(yùn)行機(jī)制不一樣,這一點(diǎn)在多重繼承時(shí)體現(xiàn)得很明顯。在super機(jī)制里可以保證公共父類(lèi)僅被執(zhí)行一次,至于執(zhí)行的順序,是按照mro進(jìn)行的(E.__mro__)。
注意super繼承只能用于新式類(lèi),用于經(jīng)典類(lèi)時(shí)就會(huì)報(bào)錯(cuò)。
新式類(lèi):必須有繼承的類(lèi),如果沒(méi)什么想繼承的,那就繼承object
經(jīng)典類(lèi):沒(méi)有父類(lèi),如果此時(shí)調(diào)用super就會(huì)出現(xiàn)錯(cuò)誤:『super() argument 1 must be type, not classobj』
關(guān)于super用法的詳細(xì)研究可參考「http://www.dhdzp.com/article/66912.htm」
相關(guān)文章
python調(diào)用MySql保姆級(jí)圖文教程(包會(huì)的)
MySQL是當(dāng)今市場(chǎng)上最受歡迎的數(shù)據(jù)庫(kù)系統(tǒng)之一,由于大多數(shù)應(yīng)用程序需要以某種形式與數(shù)據(jù)交互,因此像Python這樣的編程語(yǔ)言提供了用于存儲(chǔ)和訪問(wèn)這些數(shù)據(jù)的工具,這篇文章主要給大家介紹了關(guān)于python調(diào)用MySql的相關(guān)資料,需要的朋友可以參考下2024-12-12
Python實(shí)現(xiàn)解壓當(dāng)天創(chuàng)建的ZIP文件到指定文件夾中
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)解壓當(dāng)天創(chuàng)建的ZIP文件到指定文件夾中,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下2024-03-03
Pytorch用Tensorboard來(lái)觀察數(shù)據(jù)
這篇文章主要介紹了Pytorch用Tensorboard來(lái)觀察數(shù)據(jù),上一篇文章我們講解了關(guān)于Pytorch?Dataset的數(shù)據(jù)處理,這篇我們就來(lái)講解觀察數(shù)據(jù),下面具體相關(guān)資料,需要的朋友可以參考一下,希望對(duì)你有所幫助2021-12-12
Python中文分詞工具之結(jié)巴分詞用法實(shí)例總結(jié)【經(jīng)典案例】
這篇文章主要介紹了Python中文分詞工具之結(jié)巴分詞用法,結(jié)合實(shí)例形式總結(jié)分析了Python針對(duì)中文文件的讀取與分詞操作過(guò)程中遇到的問(wèn)題與解決方法,需要的朋友可以參考下2017-04-04
Python中yield關(guān)鍵字及與return的區(qū)別詳解
這篇文章主要介紹了Python中yield關(guān)鍵字及與return的區(qū)別詳解,帶有 yield 的函數(shù)在 Python 中被稱(chēng)之為 generator生成器,比如列表所有數(shù)據(jù)都在內(nèi)存中,如果有海量數(shù)據(jù)的話將會(huì)非常耗內(nèi)存,想要得到龐大的數(shù)據(jù),又想讓它占用空間少,那就用生成器,需要的朋友可以參考下2023-08-08
Python采集天天基金數(shù)據(jù)掌握最新基金動(dòng)向
這篇文章主要介紹了Python采集天天基金數(shù)據(jù)掌握最新基金動(dòng)向,本次案例實(shí)現(xiàn)流程為發(fā)送請(qǐng)求、獲取數(shù)據(jù)、解析數(shù)據(jù)、多頁(yè)爬取、保存數(shù)據(jù),接下來(lái)來(lái)看看具體的操作過(guò)程吧2022-01-01
python開(kāi)發(fā)之基于thread線程搜索本地文件的方法
這篇文章主要介紹了python開(kāi)發(fā)之基于thread線程搜索本地文件的方法,以完整實(shí)例形式分析了Python基于多線程處理搜索問(wèn)題的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-11-11

