python 類中__new__ 和 __init__方法區(qū)別

python中有二個(gè)特殊的方法newinit 方法浦夷。聽(tīng)黃哥來(lái)講解益涧。

init 方法為初始化方法, new方法才是真正的構(gòu)造函數(shù)软瞎。

1闯割、new方法默認(rèn)返回實(shí)例對(duì)象供init方法、實(shí)例方法使用省店。

請(qǐng)看下面的代碼嚣崭。

# coding:utf-8

class Foo(object):
    '''黃哥python培訓(xùn)蜘拉,黃哥所寫(xiě)'''
    price = 50

    def how_much_of_book(self, n):
        print(self)
        return self.price * n

foo = Foo()
print(foo.how_much_of_book(8))
print(dir(Foo))

分析上面的代碼,這個(gè)類實(shí)例化過(guò)程有鹿,F(xiàn)oo類繼承object類旭旭,繼承了object的new方法。

當(dāng)你沒(méi)有重載這個(gè)方法(通俗來(lái)說(shuō)葱跋,你沒(méi)有在Foo類中沒(méi)有寫(xiě)new方法)持寄,F(xiàn)oo實(shí)例化是默認(rèn)自動(dòng)調(diào)用父類new方法,這個(gè)方法返回值為類的實(shí)例(self),提供這個(gè)函數(shù)how_much_of_book娱俺,默認(rèn)的第一個(gè)參數(shù)self稍味。

# coding:utf-8

class Foo(object):
    price = 50

    def __new__(cls, *agrs, **kwds):
        inst = object.__new__(cls, *agrs, **kwds)
        print(inst)
        return inst

    def how_much_of_book(self, n):
        print(self)
        return self.price * n

foo = Foo()
print(foo.how_much_of_book(8))
# <__main__.Foo object at 0x1006f2750>
# <__main__.Foo object at 0x1006f2750>
# 400

請(qǐng)看上面代碼,F(xiàn)oo類中重載了new方法荠卷,它的返回值為Foo類的實(shí)例對(duì)象模庐。

2、init 方法為初始化方法油宜,為類的實(shí)例提供一些屬性或完成一些動(dòng)作掂碱。

# coding:utf-8

class Foo(object):

    def __new__(cls, *agrs, **kwds):
        inst = object.__new__(cls, *agrs, **kwds)
        print(inst)
        return inst

    def __init__(self, price=50):
        self.price = price

    def how_much_of_book(self, n):
        print(self)
        return self.price * n

foo = Foo()
print(foo.how_much_of_book(8))

# <__main__.Foo object at 0x1006f2750>
# <__main__.Foo object at 0x1006f2750>
# 400

3、new 方法創(chuàng)建實(shí)例對(duì)象供init 方法使用慎冤,init方法定制實(shí)例對(duì)象疼燥。

new 方法必須返回值,init方法不需要返回值蚁堤。(如果返回非None值就報(bào)錯(cuò))

4醉者、一般用不上new方法,new方法可以用在下面二種情況披诗。

new() is intended mainly to allow subclasses of immutable types (like int, str, or tuple) to customize instance creation. It is also commonly overridden in custom metaclasses in order to customize class creation.

繼承不可變數(shù)據(jù)類型時(shí)需要用到new方法(like int, str, or tuple) 撬即。

# coding:utf-8

class Inch(float):
    "Convert from inch to meter"
    def __new__(cls, arg=0.0):
        return float.__new__(cls, arg*0.0254)

print(Inch(12))

用在元類,定制創(chuàng)建類對(duì)象呈队。

# coding:utf-8
'''來(lái)自http://eli.thegreenplace.net/2011/08/14/python-metaclasses-by-example'''

class MetaClass(type):

    def __new__(meta, name, bases, dct):
        print '-----------------------------------'
        print "Allocating memory for class", name
        print meta
        print bases
        print dct
        return super(MetaClass, meta).__new__(meta, name, bases, dct)

    def __init__(cls, name, bases, dct):
        print '-----------------------------------'
        print "Initializing class", name
        print cls
        print bases
        print dct
        super(MetaClass, cls).__init__(name, bases, dct)

class Myclass(object):
    __metaclass__ = MetaClass

    def foo(self, param):
        print param

p = Myclass()
p.foo("hello")

# -----------------------------------
# Allocating memory for class Myclass
# <class '__main__.MetaClass'>
# (<type 'object'>,)
# {'__module__': '__main__', 'foo': <function foo at 0x1007f6500>, '__metaclass__': <class '__main__.MetaClass'>}
# -----------------------------------
# Initializing class Myclass
# <class '__main__.Myclass'>
# (<type 'object'>,)
# {'__module__': '__main__', 'foo': <function foo at 0x1007f6500>, '__metaclass__': <class '__main__.MetaClass'>}
# hello

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剥槐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掂咒,更是在濱河造成了極大的恐慌才沧,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绍刮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡挨摸,警方通過(guò)查閱死者的電腦和手機(jī)孩革,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)得运,“玉大人膝蜈,你說(shuō)我怎么就攤上這事锅移。” “怎么了饱搏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵非剃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我推沸,道長(zhǎng)备绽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任鬓催,我火速辦了婚禮肺素,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宇驾。我一直安慰自己倍靡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布课舍。 她就那樣靜靜地躺著塌西,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筝尾。 梳的紋絲不亂的頭發(fā)上雨让,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音忿等,去河邊找鬼栖忠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贸街,可吹牛的內(nèi)容都是我干的庵寞。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼薛匪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捐川!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起逸尖,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤古沥,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后娇跟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體岩齿,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年苞俘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盹沈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吃谣,死狀恐怖乞封,靈堂內(nèi)的尸體忽然破棺而出做裙,到底是詐尸還是另有隱情,我是刑警寧澤肃晚,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布锚贱,位于F島的核電站,受9級(jí)特大地震影響关串,放射性物質(zhì)發(fā)生泄漏拧廊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一悍缠、第九天 我趴在偏房一處隱蔽的房頂上張望卦绣。 院中可真熱鬧,春花似錦飞蚓、人聲如沸滤港。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)溅漾。三九已至,卻和暖如春著榴,著一層夾襖步出監(jiān)牢的瞬間添履,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工脑又, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留暮胧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓问麸,卻偏偏與公主長(zhǎng)得像往衷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子严卖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理席舍,服務(wù)發(fā)現(xiàn),斷路器哮笆,智...
    卡卡羅2017閱讀 134,638評(píng)論 18 139
  • 包(lib)来颤、模塊(module) 在Python中,存在包和模塊兩個(gè)常見(jiàn)概念稠肘。 模塊:編寫(xiě)Python代碼的py...
    清清子衿木子水心閱讀 3,801評(píng)論 0 27
  • 〇福铅、前言 本文共108張圖,流量黨請(qǐng)慎重启具! 歷時(shí)1個(gè)半月本讥,我把自己學(xué)習(xí)Python基礎(chǔ)知識(shí)的框架詳細(xì)梳理了一遍。 ...
    Raxxie閱讀 18,934評(píng)論 17 410
  • 女人如花 花非夢(mèng) 夢(mèng)進(jìn)夢(mèng)醒 夢(mèng)非夢(mèng) 怒嘛鲁冯? 美嘛拷沸? 一切源自內(nèi)心的那片凈土 靜嘛?怒嘛薯演? 一切源自內(nèi)心的那片凈土 ...
    天使蘇俊玲閱讀 293評(píng)論 0 0
  • 他譜過(guò)一曲揚(yáng)州令撞芍,給一個(gè)采荷女。 那時(shí)他正郁郁不得志跨扮,整日醉臥在拂柳軒序无。 拂柳軒在揚(yáng)州并不出名,因它既不是大雅之所...
    蠻小吉閱讀 609評(píng)論 0 0