欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實(shí)現(xiàn)單例的兩種方法解讀

 更新時間:2023年03月02日 08:38:05   作者:寸草心2130  
這篇文章主要介紹了python實(shí)現(xiàn)單例的兩種方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

python 實(shí)現(xiàn)單例的方法

第一種方法:使用基類

New 是真正創(chuàng)建實(shí)例對象的方法,所以重寫基類的new 方法,以此保證創(chuàng)建對象的時候只生成一個實(shí)例

class Singleton(object):
? ? def __new__(cls, *args, **kwargs):
? ? ? ? # hasattr 判斷是否有...屬性
? ? ? ? if not hasattr(cls, '_instance'):
? ? ? ? ? ? cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
? ? ? ? return cls._instance


class Foo(Singleton):
? ? pass

foo1 = Foo()
foo2 = Foo()

print(foo1 is foo2)

第二種方法:使用裝飾器

def Singleton(cls):
? ? instance = {}
? ? def wrapper(*args, **kwargs):
? ? ? ? if cls not in instance:
? ? ? ? ? ? instance[cls] = cls(*args, **kwargs)
? ? ? ? return instance[cls]
? ? return wrapper

@Singleton
class Foo(object):
? ? pass

foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2)

python 單例對象

單列模式

單例模式(Singleton Pattern)是一種常用的軟件設(shè)計(jì)模式,該模式的主要目的是確保某 一個類只有一個實(shí)例存在。

當(dāng)你希望在整個系統(tǒng)中,某個類只能出現(xiàn)一個實(shí)例時,單例對象 就能派上用場。

比如,某個服務(wù)器程序的配置信息存放在一個文件中,客戶端通過一個 AppConfig 的類來 讀取配置文件的信息。

如果在程序運(yùn)行期間,有很多地方都需要使用配置文件的內(nèi)容,也就 是說,很多地方都需要創(chuàng)建 AppConfig 對象的實(shí)例,這就導(dǎo)致系統(tǒng)中存在多個 AppConfig 的實(shí)例對象,而這樣會嚴(yán)重浪費(fèi)內(nèi)存資源,尤其是在配置文件內(nèi)容很多的情況 下。

事實(shí)上,類似 AppConfig 這樣的類,我們希望在程序運(yùn)行期間只存在一個實(shí)例對象。 注意:在python中導(dǎo)入模塊就是一種單例模式

簡單來說單列模式就是創(chuàng)建單列對象,重寫object類里面的__new__方法使之開辟一個內(nèi)存空間,所有對象都指向同一內(nèi)存空間,使多個對象的引用地址相同

class Dog (object):
    __instance=None
    def __new__(cls, *args, **kwargs):
        if cls.__instance==None:
            cls.__instance=object.__new__(cls)
            return cls.__instance
        else:
            return cls.__instance
dog=Dog()
dog1=Dog()
print(id(dog))
print(id(dog1))

運(yùn)行結(jié)果:

在這里插入圖片描述

你會發(fā)現(xiàn)兩個對象的id一樣 這也就說明兩個對象指向的內(nèi)存地址就一樣,這個就是單例對象

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python的collections模塊中namedtuple結(jié)構(gòu)使用示例

    Python的collections模塊中namedtuple結(jié)構(gòu)使用示例

    namedtuple顧名思義,就是名字+元組的數(shù)據(jù)結(jié)構(gòu),下面就來看一下Python的collections模塊中namedtuple結(jié)構(gòu)使用示例
    2016-07-07
  • Django 過濾器匯總及自定義過濾器使用詳解

    Django 過濾器匯總及自定義過濾器使用詳解

    這篇文章主要介紹了Django 過濾器匯總及自定義過濾器使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 一步步解析Python斗牛游戲的概率

    一步步解析Python斗牛游戲的概率

    這篇文章主要帶著大家一步步解析Python斗牛游戲的概率,計(jì)算出斗牛游戲的概率,感興趣的朋友可以參考一下
    2016-02-02
  • Python文件路徑名的操作方法

    Python文件路徑名的操作方法

    對于文件路徑名的操作在編程中是必不可少的,比如說,有時候要列舉一個路徑下的文件,那么首先就要獲取一個路徑,再就是路徑名的一個拼接問題,通過字符串的拼接就可以得到一個路徑名。這篇文章主要介紹了Python中文件路徑名的操作,需要的朋友可以參考下
    2019-10-10
  • Python中類的mro與繼承關(guān)系詳解

    Python中類的mro與繼承關(guān)系詳解

    這篇文章主要介紹了Python中類的mro與繼承關(guān)系,文章圍繞主題展開初步認(rèn)識mro的解析順序,具有一定的參考價值。需要的朋友可以參考一下
    2022-07-07
  • python中的mock接口開發(fā)示例詳解

    python中的mock接口開發(fā)示例詳解

    這篇文章主要介紹了python中的mock接口開發(fā),Mock接口就是用一些合理的手段構(gòu)造對象去模擬真實(shí)接口,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • python使用Windows的wmic命令監(jiān)控文件運(yùn)行狀況,如有異常發(fā)送郵件報警

    python使用Windows的wmic命令監(jiān)控文件運(yùn)行狀況,如有異常發(fā)送郵件報警

    這篇文章主要介紹了python使用Windows的wmic命令監(jiān)控文件運(yùn)行狀況,如有異常發(fā)送郵件報警的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • python實(shí)現(xiàn)遍歷文件夾修改文件后綴

    python實(shí)現(xiàn)遍歷文件夾修改文件后綴

    這篇文章主要介紹了python實(shí)現(xiàn)遍歷文件夾修改文件后綴,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Python reduce()函數(shù)的用法小結(jié)

    Python reduce()函數(shù)的用法小結(jié)

    reduce()函數(shù)即為化簡函數(shù),它的執(zhí)行過程為:每一次迭代,都將上一次的迭代結(jié)果,需要的朋友可以參考下
    2017-11-11
  • 分享一個簡單的python讀寫文件腳本

    分享一個簡單的python讀寫文件腳本

    這篇文章主要介紹了分享一個簡單的python讀寫文件腳本,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11

最新評論