Python中new方法的詳解
new_ 方法是什么?
__new__方法其實(shí)就是創(chuàng)建對象的方法
new()方法是在類準(zhǔn)備將自身實(shí)例化時(shí)調(diào)用。
一個(gè)類可以有多個(gè)位置參數(shù)和多個(gè)命名參數(shù),而在實(shí)例化開始之后,在調(diào)用 init()方法之前,Python首先調(diào)用new()方法:
def new(cls, *args, **kwargs): …
第一個(gè)參數(shù)cls是當(dāng)前正在實(shí)例化的類。
如果要得到當(dāng)前類的實(shí)例,應(yīng)當(dāng)在當(dāng)前類中的new()方法語句中調(diào)用當(dāng)前類的父類 的new()方法。
例如,如果當(dāng)前類是直接繼承自object,那當(dāng)前類的new()方法返回的對象應(yīng)該為:
def new(cls, *args, **kwargs): … return object.new(cls)
通常來說,當(dāng)前類開始實(shí)例化時(shí),new()方法會返回cls(cls指代當(dāng)前類)的實(shí)例,然后該類的init()方法作為構(gòu)造方法會接收這個(gè)實(shí)例(即self)作為自己的第一個(gè)參數(shù),然后依次傳入new ()方法中接收的位置參數(shù)和命名參數(shù)。
注意:如果new()沒有返回cls(即當(dāng)前類)的實(shí)例,那么當(dāng)前類的init()方法是不會被調(diào)用的。
如果new()返回其他類的實(shí)例,那么只會調(diào)用被返回的那個(gè)類的構(gòu)造方法。
class Foo(object): def init(self, *args, **kwargs): pass def new(cls, *args, **kwargs): return object.new(Stranger, *args, **kwargs)
class Stranger(object): pass
foo = Foo() print(type(foo)) 》》》》<class ‘main.Stranger'>
因此可以這么描述new()和ini()的區(qū)別,在新式類中new()才是真正的實(shí)例化方法,為類提供外殼制造出實(shí)例框架,然后調(diào)用該框架內(nèi)的構(gòu)造方法init()使其豐滿。
如果以建房子做比喻,new()方法負(fù)責(zé)開發(fā)地皮,打下地基,并將原料存放在工地。
而init()方法負(fù)責(zé)從工地取材料建造出地皮開發(fā)招標(biāo)書中規(guī)定的大樓,init()負(fù)責(zé)大樓的細(xì)節(jié)設(shè)計(jì),建造,裝修使其可交付給客戶。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點(diǎn)選驗(yàn)證碼功能
這篇文章主要介紹了Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點(diǎn)選驗(yàn)證碼功能,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12基于Tensorflow批量數(shù)據(jù)的輸入實(shí)現(xiàn)方式
今天小編就為大家分享一篇基于Tensorflow批量數(shù)據(jù)的輸入實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02python神經(jīng)網(wǎng)絡(luò)Pytorch中Tensorboard函數(shù)使用
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)Pytorch中Tensorboard常用函數(shù)的使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python編程pydantic觸發(fā)及訪問錯(cuò)誤處理
這篇文章主要為大家介紹了Python編程中pydantic會觸發(fā)及發(fā)生訪問錯(cuò)誤的處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-09-09