av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

Python 用__new__方法實現(xiàn)單例的操作

瀏覽:104日期:2022-07-02 14:54:46

介紹

init 方法通常用在初始化一個類實例時候,但其實它不是實例化一個類的時候第一個被調(diào)用 的方法。當(dāng)使用 Student(id, name) 這樣的表達(dá)式來實例化一個類時,最先被調(diào)用的方法 其實是 new 方法。

new方法接受的參數(shù)雖然也是和init一樣,但init是在類實例創(chuàng)建之后調(diào)用,而 new方法正是創(chuàng)建這個類實例的方法。

new為對象分配空間,是內(nèi)置的靜態(tài)方法,new在內(nèi)存中為對象分配了空間也返回了對象的引用,init獲得了這個引用才初始化這個實例。

示例

一個非常簡單的單例

class A: instance = None def __new__(cls, *args, **kwargs): if cls.instance is None: cls.instance = super().__new__(cls) return cls.instance

因為new方法是一個靜態(tài)方法(也就是在定義的時候就沒有cls參數(shù)),所以在這里要傳入一個cls參數(shù),而且這里的new你改造過了,所以要返回爸爸的new方法。

按造這個方法改造的單例怎么new都是同一個實例,但init仍然會被執(zhí)行多次,也就是創(chuàng)建了幾個對象就調(diào)用幾次初始化方法。所以還要對init再進(jìn)行一些判斷。

class A: instance = None init_flag = False # 初始化標(biāo)記 def __new__(cls, *args, **kwargs): if cls.instance is None: cls.instance = super().__new__(cls) return cls.instance def __init__(self): if A.init_flag: return print(’執(zhí)行了初始化方法’) A.init_flag = Trueif __name__ == ’__main__’: a = A() b = A() print(a) print(b)

輸出結(jié)果:

執(zhí)行了初始化方法

<main.A object at 0x00000210E6F09320>

<main.A object at 0x00000210E6F09320>

總結(jié)

通過重載new方法,可以比較簡單地實現(xiàn)單例,Python還有很多有趣的內(nèi)置函數(shù),有空可以再研究研究。

補(bǔ)充知識:Python餓漢式和懶漢式單例模式的實現(xiàn)

看代碼吧~

# 餓漢式class Singleton(object): # 重寫創(chuàng)建實例的__new__方法 def __new__(cls): # 如果類沒有實例屬性,進(jìn)行實例化,否則返回實例 if not hasattr(cls, ’instance’): cls.instance = super(Singleton, cls).__new__(cls) return cls.instance

餓漢式在創(chuàng)建的時候就會生成實例

# 懶漢式class Singleton(object): __instance = None def __init__(self): if not self.__instance: print(’調(diào)用__init__, 實例未創(chuàng)建’) else: print(’調(diào)用__init__,實例已經(jīng)創(chuàng)建過了:’, __instance) @classmethod def get_instance(cls): # 調(diào)用get_instance類方法的時候才會生成Singleton實例 if not cls.__instance: cls.__instance = Singleton() return cls.__instance

以上這篇Python 用__new__方法實現(xiàn)單例的操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产吃瓜黑料一区二区 | 伊人网av | 91免费福利视频 | 成人免费毛片嘿嘿连载视频 | 欧美在线小视频 | 日韩精品在线一区 | 午夜88 | 大尺度做爰床戏呻吟舒畅 | 黄网站免费观看 | 日韩高清一区 | 欧美91 | 欧美精产国品一二三区 | 黄色在线免费观看视频 | 久久久综合 | 欧美69视频 | 国产精品一区在线播放 | 欧美成人精品一区二区三区在线看 | 久久综合爱 | 国产aaa| 一级黄色免费看 | 欧美狠狠操 | 一区二区三区精品 | 狠狠干影院 | 国产成人99久久亚洲综合精品 | 免费在线黄色网址 | 国产精品国产 | 国产精品久久久久久无人区 | 日本少妇久久 | 国产理论在线 | 日韩精品一区二区在线 | 欧美成人xxx | 亚洲网站在线 | 久久性视频 | 国产九九| 日韩午夜在线 | 免费观看一级一片 | 久久久成人免费视频 | 国产精品成人免费视频 | 成人午夜网站 | 国产a视频| 一区二区精品在线 |