Python中__new__和__init__的區(qū)別與聯(lián)系
__new__ 和 __init__ 的區(qū)別主要表現(xiàn)在:
__new__ 負責對象的創(chuàng)建而 __init__ 負責對象的初始化。
__new__:創(chuàng)建對象時調(diào)用,會返回當前對象的一個實例
__init__:創(chuàng)建完對象后調(diào)用,對當前對象的一些實例初始化,無返回值
1. 在類中,如果__new__和__init__同時存在,會優(yōu)先調(diào)用__new__
class ClsTest(object): def __init__(self): print("init") def __new__(cls,*args, **kwargs): print("new")ClsTest()
輸出:
new
2. 如果__new__返回一個對象的實例,會隱式調(diào)用__init__
代碼實例:
class ClsTest(object): def __init__(self): print ("init") def __new__(cls,*args, **kwargs): print ("new %s"%cls) return object.__new__(cls, *args, **kwargs)ClsTest()
輸出:
new <class '__main__.ClsTest'>init
3. __new__方法會返回所構(gòu)造的對象,__init__則不會。__init__無返回值。
class ClsTest(object): def __init__(cls): cls.x = 2 print ("init") return clsClsTest()
輸出:
initTraceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: __init__() should return None, not 'ClsTest'
4. 若__new__沒有正確返回當前類cls的實例,那__init__是不會被調(diào)用的,即使是父類的實例也不行
class ClsTest1(object): passclass ClsTest2(ClsTest1): def __init__(self): print ("init") def __new__(cls,*args, **kwargs): print ("new %s"%cls) return object.__new__(ClsTest1, *args, **kwargs)b=ClsTest2()print (type(b))
輸出:
new <class '__main__.ClsTest2'>
<class '__main__.ClsTest1'>
知識點:
1. 繼承自object的新式類才有__new__
2. __new__至少要有一個參數(shù)cls,代表要實例化的類,此參數(shù)在實例化時由Python解釋器自動提供,__new__必須要有返回值,返回實例化出來的實例,可以return父類__new__出來的實例,或者直接是object的__new__出來的實例
3. __init__有一個參數(shù)self,就是這個__new__返回的實例,__init__在__new__的基礎(chǔ)上可以完成一些其它初始化的動作,__init__不需要返回值
4. 如果__new__返回一個對象的實例,會隱式調(diào)用__init__
更多關(guān)于Python中__new__和__init__的區(qū)別與聯(lián)系的介紹請查看下面的相關(guān)鏈接
- Python中的?__init__、__new__?和?__call__示例詳解
- Python中的魔術(shù)方法__new__詳解
- Python中__new__()方法適應(yīng)及注意事項詳解
- python中__new__和__init__的實現(xiàn)
- python __init__與 __new__的區(qū)別
- Python中class內(nèi)置方法__init__與__new__作用與區(qū)別解析
- 詳解Python中__new__方法的作用
- Python 中類的構(gòu)造方法 __New__的妙用
- Python 用__new__方法實現(xiàn)單例的操作
- python中__new__函數(shù)的具體使用
相關(guān)文章
Python爬蟲包BeautifulSoup簡介與安裝(一)
這篇文章主要為大家詳細介紹了Python爬蟲包BeautifulSoup的簡介與安裝,具有一定的參考價值,感興趣的朋友可以參考一下2018-06-06
keras的ImageDataGenerator和flow()的用法說明
這篇文章主要介紹了keras的ImageDataGenerator和flow()的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
numpy ndarray 按條件篩選數(shù)組,關(guān)聯(lián)篩選的例子
今天小編就為大家分享一篇numpy ndarray 按條件篩選數(shù)組,關(guān)聯(lián)篩選的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
淺談Python中函數(shù)的定義及其調(diào)用方法
今天小編就為大家分享一篇淺談Python中函數(shù)的定義及其調(diào)用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07

