python單例模式原理與創(chuàng)建方法實(shí)例分析
本文實(shí)例講述了python單例模式原理與創(chuàng)建方法。分享給大家供大家參考,具體如下:
1. 單例是什么
舉個(gè)常見(jiàn)的單例模式例子,我們?nèi)粘J褂玫碾娔X上都有一個(gè)回收站,在整個(gè)操作系統(tǒng)中,回收站只能有一個(gè)實(shí)例,整個(gè)系統(tǒng)都使用這個(gè)唯一的實(shí)例,而且回收站自行提供自己的實(shí)例。因此回收站是單例模式的應(yīng)用。
確保某一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例,這個(gè)類稱為單例類,單例模式是一種對(duì)象創(chuàng)建型模式。
2. 創(chuàng)建單例-保證只有1個(gè)對(duì)象
# 實(shí)例化一個(gè)單例
class Singleton(object):
__instance = None
def __new__(cls, age, name):
#如果類數(shù)字__instance沒(méi)有或者沒(méi)有賦值
#那么就創(chuàng)建一個(gè)對(duì)象,并且賦值為這個(gè)對(duì)象的引用,保證下次調(diào)用這個(gè)方法時(shí)
#能夠知道之前已經(jīng)創(chuàng)建過(guò)對(duì)象了,這樣就保證了只有1個(gè)對(duì)象
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
a = Singleton(18, "xxx")
b = Singleton(8, "xxx")
print(id(a))
print(id(b))
a.age = 19 #給a指向的對(duì)象添加一個(gè)屬性
print(b.age)#獲取b指向的對(duì)象的age屬性
運(yùn)行結(jié)果:
4391023224
4391023224
19
3. 創(chuàng)建單例時(shí),只執(zhí)行1次init方法
# 實(shí)例化一個(gè)單例
class Singleton(object):
__instance = None
__first_init = False
def __new__(cls, age, name):
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
def __init__(self, age, name):
if not self.__first_init:
self.age = age
self.name = name
Singleton.__first_init = True
a = Singleton(18, "xxx")
b = Singleton(8, "xxx")
print(id(a))
print(id(b))
print(a.age)
print(b.age)
a.age = 19
print(b.age)
運(yùn)行結(jié)果:
139953926130600
139953926130600
18
18
19
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python自定義分頁(yè)器的實(shí)現(xiàn)
這篇文章主要介紹了python自定義分頁(yè)器的實(shí)現(xiàn),通過(guò)自定義分頁(yè)器封裝展開(kāi)主題并對(duì)其實(shí)用方法簡(jiǎn)單介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04
Python+wxauto實(shí)現(xiàn)微信自動(dòng)化操作
在眾多自動(dòng)化工具中,Python的wxauto庫(kù)以其強(qiáng)大的功能和簡(jiǎn)單易用的特點(diǎn),為我們打開(kāi)了微信自動(dòng)化操作的大門(mén),下面我們就來(lái)看看它的具體操作吧2025-02-02
PyTorch詳解經(jīng)典網(wǎng)絡(luò)種含并行連結(jié)的網(wǎng)絡(luò)GoogLeNet實(shí)現(xiàn)流程
今天小編就為大家分享一篇Pytorch實(shí)現(xiàn)GoogLeNet的方法,GoogLeNet提出了一個(gè)名為“Inception”的深度卷積神經(jīng)網(wǎng)結(jié)構(gòu),其目標(biāo)是將分類、識(shí)別ILSVRC14數(shù)據(jù)集的技術(shù)水平提高一個(gè)層次。這一結(jié)構(gòu)的主要特征是對(duì)網(wǎng)絡(luò)內(nèi)部計(jì)算資源的利用進(jìn)行了優(yōu)化2022-05-05
python爬蟲(chóng)中url管理器去重操作實(shí)例
在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python爬蟲(chóng)中url管理器去重操作實(shí)例,有需要的朋友們可以參考下。2020-11-11
Pandas如何對(duì)Categorical類型字段數(shù)據(jù)統(tǒng)計(jì)實(shí)戰(zhàn)案例
這篇文章主要介紹了Pandas如何對(duì)Categorical類型字段數(shù)據(jù)統(tǒng)計(jì)實(shí)戰(zhàn)案例,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08

