Python 單例設計模式用法實例分析
本文實例講述了Python 單例設計模式用法。分享給大家供大家參考,具體如下:
demo.py(單例):
class MusicPlayer(object):
# 類屬性 記錄對象引用
instance = None
def __new__(cls, *args, **kwargs):
# 1. 判斷類屬性是否是空對象
if cls.instance is None:
# 2. 調(diào)用父類的方法,為第一個對象分配空間
cls.instance = super().__new__(cls)
# 3. 返回類屬性保存的對象引用
return cls.instance
# 創(chuàng)建多個對象
player1 = MusicPlayer()
print(player1)
player2 = MusicPlayer()
print(player2)
運行結果:
<__main__.MusicPlayer object at 0x019558B0>
<__main__.MusicPlayer object at 0x019558B0>
demo.py(__init__初始化方法只執(zhí)行一次):
class MusicPlayer(object):
# 類屬性 記錄對象引用
instance = None
# 標記是否執(zhí)行過初始化動作
init_flag = False
def __new__(cls, *args, **kwargs):
# 1. 判斷類屬性是否是空對象
if cls.instance is None:
# 2. 調(diào)用父類的方法,為第一個對象分配空間
cls.instance = super().__new__(cls)
# 3. 返回類屬性保存的對象引用
return cls.instance
def __init__(self):
# 1. 判斷是否執(zhí)行過初始化動作
if MusicPlayer.init_flag:
return
# 2. 如果沒有執(zhí)行過,再執(zhí)行初始化動作
print("初始化播放器")
# 3. 修改類屬性的標記
MusicPlayer.init_flag = True
# 創(chuàng)建多個對象
player1 = MusicPlayer()
print(player1)
player2 = MusicPlayer()
print(player2)
運行結果:
初始化播放器
<__main__.MusicPlayer object at 0x01795B30>
<__main__.MusicPlayer object at 0x01795B30>
更多關于Python相關內(nèi)容可查看本站專題:《Python數(shù)據(jù)結構與算法教程》、《Python Socket編程技巧總結》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設計有所幫助。
相關文章
Python函數(shù)式編程之面向過程面向?qū)ο蠹昂瘮?shù)式簡析
這一番我們要學習點有難度的了,因此將降低閱讀與理解難度,盡量采用大白話為你鋪墊,因為涉及的一些概念也是借鑒的其它編程語言的風格,而且實際落地中存在部分爭議不過多學一點,總是沒有壞處的2021-09-09
LyScript實現(xiàn)對內(nèi)存堆棧掃描的方法詳解
LyScript插件中提供了三種基本的堆棧操作方法,其中push_stack用于入棧,pop_stack用于出棧,peek_stac可用于檢查指定堆棧位置處的內(nèi)存參數(shù)。所以本文將利用這一特性實現(xiàn)對內(nèi)存堆棧掃描,感興趣的可以了解一下2022-08-08
如何基于python3和Vue實現(xiàn)AES數(shù)據(jù)加密
這篇文章主要介紹了如何基于python3和Vue實現(xiàn)AES數(shù)據(jù)加密,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
Python 字符串操作實現(xiàn)代碼(截取/替換/查找/分割)
這篇文章主要介紹了Python 字符串截取/替換/查找/分割等實現(xiàn)方法,需要的朋友可以參考下2013-06-06

