python __init__與 __new__的區(qū)別
一、構(gòu)造函數(shù) __init__ 與__new__
__new__ 作用: 創(chuàng)建對象,并分配內(nèi)存
__init__ 作用: 初始化對象的值
注意:
1、與java相比,java只有一個構(gòu)造器。而python __new__ 方法與 __init__ 方法 組合,才能稱為一個對應(yīng)類似于java中的構(gòu)造器
2、先執(zhí)行__new__ ,創(chuàng)建對象,并分配內(nèi)存.
再執(zhí)行 __init__,初始化對象的值。
3、任何類都繼承于object 類。
我們一般不重寫__new__ 方法。 我們不重寫,就默認(rèn)調(diào)用父類 的 __new__ 方法。
4、__new__ 方法 ,一定要return 一個對象。 如果自己重寫__new__ 方法,但是沒有return出一個對象。連對象都沒創(chuàng)建成功,后面是不會進(jìn)行初始化對象的。
例子1:
class Person(object): def __init__(self,name,id,sex): self.name = name self.id = id self.sex = sex print("初始化對象的值") def __new__(cls, *args, **kwargs): print("開始創(chuàng)建對象,并分配內(nèi)存") if __name__ == '__main__': p = Person("張三",12,"男")
運(yùn)行結(jié)果,只執(zhí)行了__new__ 方法,并沒有執(zhí)行 __init__方法。
為啥呢? 因?yàn)閚ew函數(shù),沒有返回一個 對象。
正確的用法
class Person(object): def __init__(self,name,id,sex): self.name = name self.id = id self.sex = sex print("初始化對象的值") def __new__(cls, *args, **kwargs): print("開始創(chuàng)建對象,并分配內(nèi)存") self = super().__new__(cls) return self if __name__ == '__main__': p = Person("張三",12,"男")
打印結(jié)果:
開始創(chuàng)建對象,并分配內(nèi)存
初始化對象的值
到此這篇關(guān)于python __init__與 __new__的區(qū)別的文章就介紹到這了,更多相關(guān)python __init__與 __new__內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解Python中的__init__和__new__
- python中的__init__ 、__new__、__call__小結(jié)
- Python中__init__和__new__的區(qū)別詳解
- Python中__new__與__init__方法的區(qū)別詳解
- 淺談python中的__init__、__new__和__call__方法
- 深入理解Python中的 __new__ 和 __init__及區(qū)別介紹
- Python函數(shù)__new__及__init__作用及區(qū)別解析
- Python中__new__和__init__的區(qū)別與聯(lián)系
- Python中class內(nèi)置方法__init__與__new__作用與區(qū)別解析
- 詳解Python中__new__和__init__的區(qū)別與聯(lián)系
- python中__new__和__init__的實(shí)現(xiàn)
相關(guān)文章
pandas數(shù)值排序的實(shí)現(xiàn)實(shí)例
篩選和排序是Excel中使用頻率最多的功能,本文主要介紹了pandas數(shù)值排序的實(shí)現(xiàn)實(shí)例,文中通過示例代碼介紹的非常詳細(xì),,感興趣的可以了解一下2021-07-07python 利用pyttsx3文字轉(zhuǎn)語音過程詳解
這篇文章主要介紹了python 利用pyttsx3文字轉(zhuǎn)語音過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09python3 BeautifulSoup模塊使用字典的方法抓取a標(biāo)簽內(nèi)的數(shù)據(jù)示例
這篇文章主要介紹了python3 BeautifulSoup模塊使用字典的方法抓取a標(biāo)簽內(nèi)的數(shù)據(jù),結(jié)合實(shí)例形式Fenix了python3 BeautifulSoup模塊進(jìn)行數(shù)據(jù)的抓取相關(guān)操作技巧,需要的朋友可以參考下2019-11-11Django中URL的參數(shù)傳遞的實(shí)現(xiàn)
這篇文章主要介紹了Django中URL的參數(shù)傳遞的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Python(TensorFlow框架)實(shí)現(xiàn)手寫數(shù)字識別系統(tǒng)的方法
這篇文章主要介紹了Python(TensorFlow框架)實(shí)現(xiàn)手寫數(shù)字識別系統(tǒng)的方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05