Python的单例模式
-
單例——讓類創(chuàng)建的對(duì)象,在系統(tǒng)中只有唯一的一個(gè)實(shí)例
-
定義一個(gè) 類屬性,初始值是 None,用于記錄 單例對(duì)象的引用
-
重寫 __new__ 方法
-
如果 類屬性 is None,調(diào)用父類方法分配空間,并在類屬性中記錄結(jié)果
-
返回 類屬性 中記錄的 對(duì)象引用
?
class MusicPlayer(object): ?# 定義類屬性記錄單例對(duì)象引用instance = None ?def __new__(cls, *args, **kwargs): ?# 1. 判斷類屬性是否已經(jīng)被賦值if cls.instance is None:cls.instance = super().__new__(cls) ?# 2. 返回類屬性的單例引用return cls.instance只執(zhí)行一次初始化工作
-
在每次使用類名()創(chuàng)建對(duì)象時(shí),Python的解釋器都會(huì)自動(dòng)調(diào)用兩個(gè)方法:
-
__new__ 分配空間
-
__init__ 對(duì)象初始化
-
-
在上一小節(jié)對(duì) __new__ 方法改造之后,每次都會(huì)得到 第一次被創(chuàng)建對(duì)象的引用
-
但是:初始化方法還會(huì)被再次調(diào)用
需求
-
讓 初始化動(dòng)作 只被 執(zhí)行一次
解決辦法
定義一個(gè)類屬性 init_flag 標(biāo)記是否 執(zhí)行過初始化動(dòng)作,初始值為 False
在 __init__ 方法中,判斷 init_flag,如果為 False 就執(zhí)行初始化動(dòng)作
然后將 init_flag 設(shè)置為 True
這樣,再次 自動(dòng) 調(diào)用 __init__ 方法時(shí),初始化動(dòng)作就不會(huì)被再次執(zhí)行 了
?
總結(jié)
以上是生活随笔為你收集整理的Python的单例模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用python写一个名片管理系统
- 下一篇: Python中的异常处理详解