__init__ 和__new__區(qū)別

_ init _的用法

class Person(object):
     def __init__(self,name,age):
            print('__init__')
            self.name = name
            self.age = age
p  = Person('laowang',33)
print(p)

輸出結(jié)果:

__init__
<__main__.Person object at 0x7fb2e0936450>       
實(shí)際上,_ init_函數(shù)并不是真正意義上的構(gòu)造函數(shù),init方法的作用是在對象創(chuàng)建好之后初始化變量,真正創(chuàng)建實(shí)例的是_ new_ 方法。

_ new_的用法

class Person(object):
    def __new__(cls,name,age):
        print('__new__用法')
        instance = object.__new__(cls)
        return instance

    def __init__(self,name,age):
        print('__init__用法')
        self.name =name
        self.age = age

p  = Person('laowang',33)
print(p.name)
print(p.age)

輸出結(jié)果:

__new__用法
__init__用法
laowang
33

用_ new_實(shí)現(xiàn)單例模式

class Person(object):
    __instance = None
    __init_flag  = False
    def __new__(cls):
        if cls.__instance == None:
              cls.__instance = object.__new__(cls)
              return cls.__instance
        else:
              return cls.__instance
    
    def __init__(self,name,age):
       if  Persom.__init_flag == False:
              self.name =name
              self.age  = age
              Person.__init_flag = True
p1 = Person('laowang',33)
p2 = Person('laozhang',30)
print(p1.name)
print(p2.name)
print(id(p1))
print(id(p2))

輸出結(jié)果:

laowang
laowang
139736432307000
139736432307000
  • 可以看到p1 和 p2 都指向同一個(gè)對象,實(shí)現(xiàn)了單例模式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,627評論 18 399
  • Scala與Java的關(guān)系 Scala與Java的關(guān)系是非常緊密的?。?因?yàn)镾cala是基于Java虛擬機(jī),也就是...
    燈火gg閱讀 3,606評論 1 24
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,506評論 0 13
  • 主題分享(職業(yè)規(guī)劃師趙凌): 1、 什么是生涯規(guī)劃: 生涯規(guī)劃,英文里是Career,意味著一條路可以帶你...
    粉紅雪人閱讀 224評論 0 1
  • 作者:戶慧麗 關(guān)鍵詞:王蟲,孢子,毀掉的村莊,毒森林,猶巴老師,腐海,風(fēng)車村,公主娜烏西卡 影評:影片開頭用猶巴的...
    小小故事大智慧閱讀 3,765評論 0 1

友情鏈接更多精彩內(nèi)容