91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中__init__和__new__方法有什么用

發布時間:2022-01-04 10:27:00 來源:億速云 閱讀:194 作者:小新 欄目:編程語言

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

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

# 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):  # 可以定義任意參數
        print('__call__ ')
A()

輸出

__new__
__init__

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

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

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>

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

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

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

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

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

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 __ 方法

一般我們不會去重寫該方法,除非你確切知道怎么做,什么時候你會去關心它呢,它作為構造函數用于創建對象,是一個工廠函數,專用于生產實例對象。著名的設計模式之一,單例模式,就可以通過此方法來實現。在自己寫框架級的代碼時,可能你會用到它,我們也可以從開源代碼中找到它的應用場景,例如微型 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 方法是實現單例模式的的一種方式,如果實例對象存在了就直接返回該實例即可,如果還沒有,那么就先創建一個實例,再返回。當然,實現單例模式的方法不只一種,Python之禪有說:

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆回县| 青神县| 竹北市| 航空| 城市| 清丰县| 古交市| 嘉荫县| 延安市| 金华市| 乡城县| 丰镇市| 会同县| 酉阳| 吴桥县| 昌邑市| 杭锦后旗| 闻喜县| 平山县| 杭锦旗| 宝应县| 南昌县| 都昌县| 安泽县| 蒲城县| 沐川县| 闸北区| 延庆县| 武隆县| 祁连县| 宁陵县| 象山县| 西安市| 平和县| 武威市| 义乌市| 乐都县| 宣化县| 海阳市| 梅州市| 西乌|