主頁 > 知識(shí)庫 > Python中__new__和__init__的區(qū)別與聯(lián)系

Python中__new__和__init__的區(qū)別與聯(lián)系

熱門標(biāo)簽:蘇州電銷機(jī)器人十大排行榜 江蘇房產(chǎn)電銷機(jī)器人廠家 悟空智電銷機(jī)器人6 溫州旅游地圖標(biāo)注 幫人做地圖標(biāo)注收費(fèi)算詐騙嗎 外呼不封號(hào)系統(tǒng) 電信營業(yè)廳400電話申請(qǐng) 遼寧400電話辦理多少錢 荊州云電銷機(jī)器人供應(yīng)商

__new__ 和 __init__ 的區(qū)別主要表現(xiàn)在:

__new__ 負(fù)責(zé)對(duì)象的創(chuàng)建而 __init__ 負(fù)責(zé)對(duì)象的初始化。

__new__:創(chuàng)建對(duì)象時(shí)調(diào)用,會(huì)返回當(dāng)前對(duì)象的一個(gè)實(shí)例

__init__:創(chuàng)建完對(duì)象后調(diào)用,對(duì)當(dāng)前對(duì)象的一些實(shí)例初始化,無返回值

1. 在類中,如果__new__和__init__同時(shí)存在,會(huì)優(yōu)先調(diào)用__new__

class ClsTest(object):    def __init__(self):        print("init")    def __new__(cls,*args, **kwargs):        print("new")ClsTest()

輸出:

new

2. 如果__new__返回一個(gè)對(duì)象的實(shí)例,會(huì)隱式調(diào)用__init__

代碼實(shí)例:

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__方法會(huì)返回所構(gòu)造的對(duì)象,__init__則不會(huì)。__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__沒有正確返回當(dāng)前類cls的實(shí)例,那__init__是不會(huì)被調(diào)用的,即使是父類的實(shí)例也不行

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'>

知識(shí)點(diǎn):

1. 繼承自object的新式類才有__new__

2. __new__至少要有一個(gè)參數(shù)cls,代表要實(shí)例化的類,此參數(shù)在實(shí)例化時(shí)由Python解釋器自動(dòng)提供,__new__必須要有返回值,返回實(shí)例化出來的實(shí)例,可以return父類__new__出來的實(shí)例,或者直接是object的__new__出來的實(shí)例

3. __init__有一個(gè)參數(shù)self,就是這個(gè)__new__返回的實(shí)例,__init__在__new__的基礎(chǔ)上可以完成一些其它初始化的動(dòng)作,__init__不需要返回值

4. 如果__new__返回一個(gè)對(duì)象的實(shí)例,會(huì)隱式調(diào)用__init__

更多關(guān)于Python中__new__和__init__的區(qū)別與聯(lián)系的介紹請(qǐng)查看下面的相關(guān)鏈接

您可能感興趣的文章:
  • Python函數(shù)__new__及__init__作用及區(qū)別解析
  • 深入理解Python中的 __new__ 和 __init__及區(qū)別介紹
  • 淺談python中的__init__、__new__和__call__方法
  • 詳解Python中的__new__、__init__、__call__三個(gè)特殊方法
  • Python中__new__與__init__方法的區(qū)別詳解
  • Python中的__new__與__init__魔術(shù)方法理解筆記
  • Python中__init__和__new__的區(qū)別詳解
  • python中的__init__ 、__new__、__call__小結(jié)
  • 詳解Python中的__init__和__new__

標(biāo)簽:三沙 欽州 宿遷 濟(jì)南 喀什 景德鎮(zhèn) 黃山 臺(tái)灣

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python中__new__和__init__的區(qū)別與聯(lián)系》,本文關(guān)鍵詞  Python,中,new,和,init,的,區(qū)別,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python中__new__和__init__的區(qū)別與聯(lián)系》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python中__new__和__init__的區(qū)別與聯(lián)系的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章