真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中__init__和__new__方法有什么用-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)Python中__init__和__new__方法有什么用的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供臥龍企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、成都做網(wǎng)站、H5建站、小程序制作等業(yè)務(wù)。10年已為臥龍眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進行中。

__ init __方法
init方法負責對象的初始化,系統(tǒng)執(zhí)行該方法前,其實該對象已經(jīng)存在了,要不然初始化什么東西呢?先看例子:

# class A(object): python2 必須顯示地繼承objectclass A:
    def __init__(self):
        print("__init__ ")        super(A, self).__init__()    def __new__(cls):
        print("__new__ ")        return super(A, cls).__new__(cls)    def __call__(self):  # 可以定義任意參數(shù)
        print('__call__ ')
A()

輸出

__new__
__init__

小編推薦一個學python的學習qun 740,3222,34
無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學習!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

從輸出結(jié)果來看, new方法先被調(diào)用,返回一個實例對象,接著 init 被調(diào)用。 call方法并沒有被調(diào)用,這個我們放到最后說,先來說說前面兩個方法,稍微改寫成:

def __init__(self):
    print("__init__ ")
    print(self)    super(A, self).__init__()def __new__(cls):
    print("__new__ ")    self = super(A, cls).__new__(cls)
    print(self)    return self

輸出:

__new__ 
<__main__.A object at 0x1007a95f8>__init__ 
<__main__.A object at 0x1007a95f8>

從輸出結(jié)果來看,new 方法的返回值就是類的實例對象,這個實例對象會傳遞給 init 方法中定義的 self 參數(shù),以便實例對象可以被正確地初始化。

如果 new 方法不返回值(或者說返回 None)那么 init 將不會得到調(diào)用,這個也說得通,因為實例對象都沒創(chuàng)建出來,調(diào)用 init 也沒什么意義,此外,Python 還規(guī)定,init 只能返回 None 值,否則報錯,這個留給大家去試。

__ init __方法可以用來做一些初始化工作,比如給實例對象的狀態(tài)進行初始化:

def __init__(self, a, b):    self.a = a    self.b = b    super(A, self).__init__()

另外,__ init __方法中除了self之外定義的參數(shù),都將與new方法中除cls參數(shù)之外的參數(shù)是必須保持一致或者等效。

class B:
    def __init__(self, *args, **kwargs):
        print("init", args, kwargs)    def __new__(cls, *args, **kwargs):
        print("new", args, kwargs)        return super().__new__(cls)
B(1, 2, 3)# 輸出new (1, 2, 3) {}
init (1, 2, 3) {}

__ new __ 方法

一般我們不會去重寫該方法,除非你確切知道怎么做,什么時候你會去關(guān)心它呢,它作為構(gòu)造函數(shù)用于創(chuàng)建對象,是一個工廠函數(shù),專用于生產(chǎn)實例對象。著名的設(shè)計模式之一,單例模式,就可以通過此方法來實現(xiàn)。在自己寫框架級的代碼時,可能你會用到它,我們也可以從開源代碼中找到它的應(yīng)用場景,例如微型 Web 框架 Bootle 就用到了。

class BaseController(object):
    _singleton = None
    def __new__(cls, *a, **k):
        if not cls._singleton:
            cls._singleton = object.__new__(cls, *a, **k)        return cls._singleton

這段代碼出自  https://github.com/bottlepy/bottle/blob/release-0.6/bottle.py

這就是通過 new 方法是實現(xiàn)單例模式的的一種方式,如果實例對象存在了就直接返回該實例即可,如果還沒有,那么就先創(chuàng)建一個實例,再返回。當然,實現(xiàn)單例模式的方法不只一種,Python之禪有說:

There should be one-- and preferably only one --obvious way to do it.
用一種方法,最好是只有一種方法來做一件事

感謝各位的閱讀!關(guān)于“Python中__init__和__new__方法有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


當前題目:Python中__init__和__new__方法有什么用-創(chuàng)新互聯(lián)
本文鏈接:http://weahome.cn/article/doiepi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部