久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Python 用__new__方法實現單例的操作

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

介紹

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

new方法接受的參數雖然也是和init一樣,但init是在類實例創建之后調用,而 new方法正是創建這個類實例的方法。

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

示例

一個非常簡單的單例

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

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

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

class A: instance = None init_flag = False # 初始化標記 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(’執行了初始化方法’) A.init_flag = Trueif __name__ == ’__main__’: a = A() b = A() print(a) print(b)

輸出結果:

執行了初始化方法

<main.A object at 0x00000210E6F09320>

<main.A object at 0x00000210E6F09320>

總結

通過重載new方法,可以比較簡單地實現單例,Python還有很多有趣的內置函數,有空可以再研究研究。

補充知識:Python餓漢式和懶漢式單例模式的實現

看代碼吧~

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

餓漢式在創建的時候就會生成實例

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

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

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 久久精品中文字幕一区 | 婷婷91| 国产精品久久久久久久久久三级 | 亚洲免费精品 | 国产精品精品视频一区二区三区 | 久久av网| 成人免费视频网 | 久久美女视频 | 亚洲欧洲一区二区 | 麻豆视频国产 | 玖玖玖影院 | 欧美日韩视频在线播放 | 在线观看三区 | 欧美一区二区三区在线看 | 西西做爰免费视频 | 国产在线一二 | 久久久av| 国产一区二区三区四区五区 | 国产色在线观看 | 99久久久久国产精品免费 | 精品国产区 | 欧美另类国产 | 久久精品国产99精品国产亚洲性色 | 国产欧美日韩综合精品一区二区 | 夜夜爽99久久国产综合精品女不卡 | 成人亚洲 | 精品影院 | 久久一区二区三区四区 | 日韩欧美在线视频观看 | 伊人久麻豆社区 | 九九人人 | 中国妞videos高潮 | 成人在线视频一区二区 | h片免费 | 国产精品欧美日韩 | 波多野结衣精品 | 国产精品成人3p一区二区三区 | 欧美激情精品久久久久久 | 欧美一区成人 | 国产精品久久久久久久久久久久久久 | 91社区在线观看 |