Python 單例設(shè)計(jì)模式用法實(shí)例分析
本文實(shí)例講述了Python 單例設(shè)計(jì)模式用法。分享給大家供大家參考,具體如下:
demo.py(單例):
class MusicPlayer(object):
# 類屬性 記錄對(duì)象引用
instance = None
def __new__(cls, *args, **kwargs):
# 1. 判斷類屬性是否是空對(duì)象
if cls.instance is None:
# 2. 調(diào)用父類的方法,為第一個(gè)對(duì)象分配空間
cls.instance = super().__new__(cls)
# 3. 返回類屬性保存的對(duì)象引用
return cls.instance
# 創(chuàng)建多個(gè)對(duì)象
player1 = MusicPlayer()
print(player1)
player2 = MusicPlayer()
print(player2)
運(yùn)行結(jié)果:
<__main__.MusicPlayer object at 0x019558B0>
<__main__.MusicPlayer object at 0x019558B0>
demo.py(__init__初始化方法只執(zhí)行一次):
class MusicPlayer(object):
# 類屬性 記錄對(duì)象引用
instance = None
# 標(biāo)記是否執(zhí)行過(guò)初始化動(dòng)作
init_flag = False
def __new__(cls, *args, **kwargs):
# 1. 判斷類屬性是否是空對(duì)象
if cls.instance is None:
# 2. 調(diào)用父類的方法,為第一個(gè)對(duì)象分配空間
cls.instance = super().__new__(cls)
# 3. 返回類屬性保存的對(duì)象引用
return cls.instance
def __init__(self):
# 1. 判斷是否執(zhí)行過(guò)初始化動(dòng)作
if MusicPlayer.init_flag:
return
# 2. 如果沒(méi)有執(zhí)行過(guò),再執(zhí)行初始化動(dòng)作
print("初始化播放器")
# 3. 修改類屬性的標(biāo)記
MusicPlayer.init_flag = True
# 創(chuàng)建多個(gè)對(duì)象
player1 = MusicPlayer()
print(player1)
player2 = MusicPlayer()
print(player2)
運(yùn)行結(jié)果:
初始化播放器
<__main__.MusicPlayer object at 0x01795B30>
<__main__.MusicPlayer object at 0x01795B30>
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python使用設(shè)計(jì)模式中的責(zé)任鏈模式與迭代器模式的示例
- Python的組合模式與責(zé)任鏈模式編程示例
- python3 簡(jiǎn)單實(shí)現(xiàn)組合設(shè)計(jì)模式
- python 最簡(jiǎn)單的實(shí)現(xiàn)適配器設(shè)計(jì)模式的示例
- Python PO設(shè)計(jì)模式的具體使用
- Python設(shè)計(jì)模式之簡(jiǎn)單工廠模式實(shí)例詳解
- Python設(shè)計(jì)模式之代理模式實(shí)例詳解
- Python設(shè)計(jì)模式之工廠方法模式實(shí)例詳解
- Python設(shè)計(jì)模式之觀察者模式原理與用法詳解
- 淺析Python 責(zé)任鏈設(shè)計(jì)模式
相關(guān)文章
Python函數(shù)式編程之面向過(guò)程面向?qū)ο蠹昂瘮?shù)式簡(jiǎn)析
這一番我們要學(xué)習(xí)點(diǎn)有難度的了,因此將降低閱讀與理解難度,盡量采用大白話為你鋪墊,因?yàn)樯婕暗囊恍└拍钜彩墙梃b的其它編程語(yǔ)言的風(fēng)格,而且實(shí)際落地中存在部分爭(zhēng)議不過(guò)多學(xué)一點(diǎn),總是沒(méi)有壞處的2021-09-09
Python讀取圖片EXIF信息類庫(kù)介紹和使用實(shí)例
這篇文章主要介紹了Python讀取圖片EXIF信息類庫(kù)介紹和使用實(shí)例,例如Python Imaging Library、EXIF.py等,需要的朋友可以參考下2014-07-07
LyScript實(shí)現(xiàn)對(duì)內(nèi)存堆棧掃描的方法詳解
LyScript插件中提供了三種基本的堆棧操作方法,其中push_stack用于入棧,pop_stack用于出棧,peek_stac可用于檢查指定堆棧位置處的內(nèi)存參數(shù)。所以本文將利用這一特性實(shí)現(xiàn)對(duì)內(nèi)存堆棧掃描,感興趣的可以了解一下2022-08-08
如何基于python3和Vue實(shí)現(xiàn)AES數(shù)據(jù)加密
這篇文章主要介紹了如何基于python3和Vue實(shí)現(xiàn)AES數(shù)據(jù)加密,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Python 字符串操作實(shí)現(xiàn)代碼(截取/替換/查找/分割)
這篇文章主要介紹了Python 字符串截取/替換/查找/分割等實(shí)現(xiàn)方法,需要的朋友可以參考下2013-06-06
關(guān)于Python中Flask全局異常處理流程詳解
Flask是一個(gè)基于Python的Web框架,它提供了全局異常處理的機(jī)制來(lái)捕獲和處理應(yīng)用程序中的異常,本文將詳細(xì)介紹Flask的全局異常處理,并提供相應(yīng)的代碼示例,需要的朋友可以參考下2023-06-06

