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

溫馨提示×

溫馨提示×

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

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

Python的__Init__ 和__New__有什么區別

發布時間:2023-04-13 11:33:25 來源:億速云 閱讀:132 作者:iii 欄目:編程語言

這篇文章主要講解了“Python的__Init__ 和__New__有什么區別”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python的__Init__ 和__New__有什么區別”吧!

簡述__init__

__init__(self): 這個方法我們相對較熟悉,他是python 類中默認的初始化方法,即一個類實例化時,就會執行的方法。

詳解__new__

__new__ 方法重寫非常固定,通常如下:

def __new__(cls):
return super().__new__(cls)

其中cls 代表類本身。

重寫__new__方法的代碼非常固定:重寫__new__方法一定要return super().__new__(cls),或者return object.__new__(cls)否則python解釋器會得不到分配了空間的對象引用,就不會調用對象的初始化方法。例如:

class Mycls:
def __new__(cls):
 print('new')
 return super().__new__(cls)
def __init__(self):
print('init')
my=Mycls()

輸出:

  • new

  • init

我們可以看到new 在init之前輸出,證明__new__(cls)在__init__(self)之前執行。

我們重寫代碼:

def __new__(cls):
 print('new')
my=Mycls()
print(my)

輸出:

  • new

  • None

可以看到如果__new__(cls):中沒有返回值,不會返回實例,__init__(self)將不會執行。

__new__和__init__總結

1.__new__()方法用于創建實例,類實例化之前會首先調用,它是class的方法,是個靜態方法。而__init__()方法用戶初始化實例,該方法用在實例對象創建后被調用,它是實例對象的方法,用于設置類實例對象的一些初始值。

2.如果類中同時出現了__init__()方法和__new__()方法,則先調用__new__()方法后調用__init__()方法。__new__()方法是創建實例的第一步,執行完了需要返回創建的類的實例,否則則報錯,無法執行__init__()方法。其中,__init__()方法將不返回任何信息。

__new__的應用

有的同學會問 用__new__來實現什么東東呢?

個人覺得,單例就是一個最經典的應用。單例模式(Singleton Pattern)是一種常用的軟件設計模式,該模式的主要目的是確保某一個類只有一個實例存在。當我們希望在整個系統中,某個類只能出現一個實例時,單例對象就能派上用場。例如,一個系統中可以存在多個打印任務,但是只能有一個正在工作的任務;一個系統只能有一個窗口管理器或文件系統;一個系統只能有一個計時工具或ID(序號)生成器。

具體實現代碼如下:

class Mycls:
_instance = None
 def __new__(cls):
 # 判斷該類的屬性是否為空;對第一個對象沒有被創建,我們應該調用父類的方法,為第一個對象分配空間
 if cls._instance == None:
 # 把類屬性中保存的對象引用返回給python的解釋器
cls._instance = object.__new__(cls)
return cls._instance
# 如果cls._instance不為None,直接返回已經實例化了的實例對象
else:
return cls._instance
def __init__(self):
print('init')
my1=Mycls()
print(my1)
my2=Mycls()
print(my2)

輸出:

initInit

可以看到雖然叫my1 和my2,但是他們都是對象0x000000406E471148,這就是單例模式的應用。

感謝各位的閱讀,以上就是“Python的__Init__ 和__New__有什么區別”的內容了,經過本文的學習后,相信大家對Python的__Init__ 和__New__有什么區別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

乌拉特前旗| 罗城| 康保县| 平陆县| 溆浦县| 水城县| 深水埗区| 德阳市| 武山县| 宝鸡市| 嵩明县| 江油市| 邳州市| 肃北| 榆林市| 鄱阳县| 宕昌县| 慈溪市| 鄂温| 邓州市| 高碑店市| 奇台县| 瑞安市| 阆中市| 志丹县| 新巴尔虎右旗| 子长县| 元江| 尼勒克县| 辽宁省| 洪泽县| 夹江县| 临高县| 游戏| 海原县| 曲周县| 陵川县| 额敏县| 巩留县| 天全县| 平舆县|