python類的繼承實(shí)例詳解
python 類的繼承
對(duì)于許多文章講解python類的繼承,大多數(shù)都是說(shuō)一些什么oop,多態(tài)等概念,我認(rèn)為這樣可能對(duì)有一定基礎(chǔ)的開(kāi)發(fā)者幫助不是那么大,不如直接用在各種情況下所寫(xiě)的代碼,來(lái)展示對(duì)于某一種代碼情況,代碼運(yùn)行會(huì)有什么效果。這樣可能對(duì)開(kāi)發(fā)者的幫助更大。不說(shuō)廢話,直接上代碼。
這里不區(qū)分經(jīng)典類和新式類,下面分析的對(duì)新式類和經(jīng)典類都適用
對(duì)于類中的__init__函數(shù),只是一個(gè)初始化是調(diào)用的一個(gè)函數(shù)(ps:初始化和創(chuàng)建實(shí)例并不是一個(gè)過(guò)程,實(shí)例的創(chuàng)建是通過(guò)一個(gè)create函數(shù)來(lái)完成的),如果在子類中沒(méi)有顯示的聲明__init__函數(shù),則子類就會(huì)調(diào)用父類的__init__函數(shù),但是不會(huì)再調(diào)用父類的父類中的__init__函數(shù),如果顯示的聲明了__init__ 函數(shù),則在子類的初始化的時(shí)候就不會(huì)調(diào)用父類的初始化函數(shù),只會(huì)調(diào)用子類中聲明的__init__函數(shù), 同時(shí)在子類實(shí)例中也不會(huì)有父類__init__函數(shù)中聲明的屬性,
例子:
class animal(): name="hh" sex="man" def __init__(self): self.height=10 self.weight=50 def deception(self): print "ansible.height:"+self.height+" animal.weight:"+self.weight def run(self): print "animal is running...." class dog(animal): def __init__(self): pass if __name__=="__main__": dg=dog() print dg.__dict__
此時(shí)運(yùn)行的結(jié)果為
{}
當(dāng)把dog類修改為如下時(shí)(ps:此時(shí)沒(méi)有顯示的聲明__init__方法):
class dog(animal): def run(self): print "dog is running..."
此時(shí)由于直接調(diào)用的父類animal的__init__方法,結(jié)果如下:
{'weight': 50, 'height': 10}
如果此時(shí)有一個(gè)類繼承dog類,此時(shí)會(huì)出現(xiàn)什么情況呢?(python解釋器先在子類中尋找__init__方法,如果沒(méi)有找到,再?gòu)母割愔姓遥钡秸业綖橹?,并運(yùn)行,并且不再運(yùn)行父類的父類的__init__方法,此時(shí)沒(méi)有運(yùn)行的__init__方法中的創(chuàng)建的屬性是沒(méi)有的,例如上面的例子,第一次運(yùn)行時(shí)得到的例子中并沒(méi)有weight和height屬性)
class animal(): name="hh" sex="" def __init__(self): self.height=10 self.weight=50 def deception(self): print "ansible.height:"+self.height+" animal.weight:"+self.weight def run(self): print "animal is running...." class dog(animal): def __init__(self): pass def run(self): print "dog is running..." class jinmao(dog): # def __init__(self): # self.ji="jinmao" pass if __name__=="__main__": dg=jinmao() print dg.__dict__
此時(shí)的結(jié)果一樣是
{}
在類的多繼承中會(huì)產(chǎn)生什么狀況呢?(在多繼承中會(huì)運(yùn)行類的繼承參數(shù)中的第一個(gè)參數(shù)聲明的父類中的__init__函數(shù),如果父類中沒(méi)有__init__函數(shù),繼續(xù)尋找父類的父類中有沒(méi)有,以此類推。。。如果找到了頭還是沒(méi)有,則換為第二個(gè)參數(shù)聲明的父類,過(guò)程如第一個(gè)參數(shù),知道找到__init__函數(shù)為止,如果都沒(méi)有找到,則不初始化),代碼可以根據(jù)前面例子自己測(cè)試。
對(duì)于在子類中調(diào)用父類中的方法的super的使用與特性。
總結(jié):如果想了解python虛擬機(jī)具體是怎么創(chuàng)建類的(具體到當(dāng)加載一個(gè).pyc文件時(shí),是怎么通過(guò)c語(yǔ)言的代碼邏輯來(lái)把類對(duì)象放到一塊內(nèi)存中的,我也在了解這方面的內(nèi)容,希望咱們一塊探索)
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Python正則表達(dá)式實(shí)現(xiàn)截取成對(duì)括號(hào)的方法
這篇文章主要介紹了Python正則表達(dá)式實(shí)現(xiàn)截取成對(duì)括號(hào)的方法,涉及Python正則匹配相關(guān)操作技巧,需要的朋友可以參考下2017-01-01python3中的函數(shù)與參數(shù)及空值問(wèn)題
這篇文章主要介紹了python3-函數(shù)與參數(shù)以及空值,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11Python中關(guān)于函數(shù)的具體用法范例以及介紹
函數(shù)是組織好的,可重復(fù)使用的,用來(lái)實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。你已經(jīng)知道Python提供了許多內(nèi)建函數(shù),比如print()。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)2021-09-09用python獲取txt文件中關(guān)鍵字的數(shù)量
這篇文章主要介紹了如何用python獲取txt文件中關(guān)鍵字的數(shù)量,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12Python 中如何實(shí)現(xiàn)參數(shù)化測(cè)試的方法示例
這篇文章主要介紹了Python 中如何實(shí)現(xiàn)參數(shù)化測(cè)試的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Django接收post前端返回的json格式數(shù)據(jù)代碼實(shí)現(xiàn)
這篇文章主要介紹了Django接收post前端返回的json格式數(shù)據(jù)代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Python命令行參數(shù)解析之a(chǎn)rgparse模塊詳解
這篇文章主要介紹了Python命令行參數(shù)解析之a(chǎn)rgparse模塊詳解,argparse?是?Python?的一個(gè)標(biāo)準(zhǔn)庫(kù),用于命令行參數(shù)的解析,這意味著我們無(wú)需在代碼中手動(dòng)為變量賦值,而是可以直接在命令行中向程序傳遞相應(yīng)的參數(shù),再由變量去讀取這些參數(shù),需要的朋友可以參考下2023-08-08python實(shí)現(xiàn)會(huì)員信息管理系統(tǒng)(List)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)會(huì)員信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Django 配置多站點(diǎn)多域名的實(shí)現(xiàn)步驟
這篇文章主要介紹了Django 配置多站點(diǎn)多域名的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05