您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何進行init和new的對比及單例模式分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
簡單總結如下:
1,__new__方法是對象的生成方法,__init__方法是對象的初始化方法。
2,對象生成后,才能初始化。故__new__方法在__init__方法之前調(diào)用。
3,__new__方法的第一個參數(shù)是cls,指的是類本身,__init__的第一個參數(shù)是self,指的是__new__方法生成的對象。
4,__new__方法的其余參數(shù)會和生成的對象一起繼續(xù)傳給__init__方法。
5,__new__方法的返回值通常調(diào)用其父類的__new__方法生成。
6,__init__方法不能有返回值。
7,__new__較少使用,可以用它實現(xiàn)單例模式,即一個類只能創(chuàng)建一個實例,有時候通過使用單例模式可以極大減少內(nèi)存的占用。
用到的代碼如下:
class Book(object):
#對象生成方法
def __new__(cls, title):
# 設計成單例模式
if not hasattr(cls,"_instance"):
cls._instance= super().__new__(cls)
print('in __new__')
return cls._instance
#對象初始化方法
def __init__(self, title):
print('in __init__')
super().__init__()
self.title = title
if __name__ == '__main__':
b = Book('The Spider Book')
b2= Book('The Flask Book')
print(id(b))
print(id(b2))
print(b.title)
print(b2.title)
看完上述內(nèi)容,你們對如何進行init和new的對比及單例模式分析有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。