濮阳杆衣贸易有限公司

主頁 > 知識庫 > 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)算詐騙嗎 外呼不封號系統(tǒng) 電信營業(yè)廳400電話申請 遼寧400電話辦理多少錢 荊州云電銷機(jī)器人供應(yīng)商

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

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

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

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

1. 在類中,如果__new__和__init__同時(shí)存在,會優(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è)對象的實(shí)例,會隱式調(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__方法會返回所構(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__沒有正確返回當(dāng)前類cls的實(shí)例,那__init__是不會被調(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'>

知識點(diǎn):

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

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

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

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

更多關(guān)于Python中__new__和__init__的區(qū)別與聯(lián)系的介紹請查看下面的相關(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) 黃山 臺灣

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python中__new__和__init__的區(qū)別與聯(lián)系》,本文關(guān)鍵詞  Python,中,new,和,init,的,區(qū)別,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?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)民參考!
  • 推薦文章
    乾安县| 迁西县| 义乌市| 宁德市| 临洮县| 正镶白旗| 呼伦贝尔市| 黄平县| 蚌埠市| 新绛县| 乌兰县| 柏乡县| 拜城县| 从化市| 海城市| 汽车| 海兴县| 顺昌县| 怀宁县| 郴州市| 白城市| 克山县| 平舆县| 泸定县| 阳江市| 大悟县| 武夷山市| 芒康县| 呈贡县| 隆尧县| 夏邑县| 宽城| 斗六市| 鹤山市| 舒城县| 黄山市| 开原市| 新和县| 嘉定区| 濉溪县| 镇原县|