最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

第一種方法:使用基類

New 是真正創(chuàng)建實(shí)例對(duì)象的方法,所以重寫基類的new 方法,以此保證創(chuàng)建對(duì)象的時(shí)候只生成一個(gè)實(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 單例對(duì)象

單列模式

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

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

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

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

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

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

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é)果:

在這里插入圖片描述

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

總結(jié)

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

相關(guān)文章

  • 一文教你用python編寫Dijkstra算法進(jìn)行機(jī)器人路徑規(guī)劃

    一文教你用python編寫Dijkstra算法進(jìn)行機(jī)器人路徑規(guī)劃

    迪杰斯特拉(Dijkstra)算法是典型最短路徑算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他節(jié)點(diǎn)的最短路徑,這篇文章主要給大家介紹了關(guān)于利用python編寫Dijkstra算法進(jìn)行機(jī)器人路徑規(guī)劃的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 利用Python實(shí)現(xiàn)添加或讀取Excel公式

    利用Python實(shí)現(xiàn)添加或讀取Excel公式

    Excel公式是數(shù)據(jù)處理的核心工具,從簡(jiǎn)單的加減運(yùn)算到復(fù)雜的邏輯判斷,掌握基礎(chǔ)語法是高效工作的起點(diǎn),下面我們就來看看如何使用Python進(jìn)行Excel公式的添加與讀取吧
    2025-03-03
  • Python中sys模塊常用方法與變量實(shí)例探究

    Python中sys模塊常用方法與變量實(shí)例探究

    sys?模塊是 Python 標(biāo)準(zhǔn)庫(kù)中的一個(gè)核心模塊,提供了與解釋器進(jìn)行交互的功能,了解?sys?模塊的方法和變量對(duì)于更有效地管理和調(diào)試 Python 程序至關(guān)重要,本文將深入探討?sys?模塊的常用方法和變量,通過詳細(xì)的示例代碼,幫助大家更全面地了解并靈活運(yùn)用這一關(guān)鍵模塊
    2024-01-01
  • Django Path轉(zhuǎn)換器自定義及正則代碼實(shí)例

    Django Path轉(zhuǎn)換器自定義及正則代碼實(shí)例

    這篇文章主要介紹了Django Path轉(zhuǎn)換器自定義及正則代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python實(shí)現(xiàn)基本線性數(shù)據(jù)結(jié)構(gòu)

    Python實(shí)現(xiàn)基本線性數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要實(shí)現(xiàn)四種數(shù)據(jù)結(jié)構(gòu),分別是數(shù)組、堆棧、隊(duì)列、鏈表。大家都知道可以用C語言實(shí)現(xiàn)這幾種數(shù)據(jù)結(jié)構(gòu),其實(shí)Python也可以實(shí)現(xiàn),下面跟著小編一起來學(xué)習(xí)。
    2016-08-08
  • tensorflow2.0的函數(shù)簽名與圖結(jié)構(gòu)(推薦)

    tensorflow2.0的函數(shù)簽名與圖結(jié)構(gòu)(推薦)

    這篇文章主要介紹了tensorflow2.0的函數(shù)簽名與圖結(jié)構(gòu),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python中的pip命令安裝與使用輕松入門教程

    Python中的pip命令安裝與使用輕松入門教程

    pip是Python的包管理工具,用于安裝、卸載和管理第三方庫(kù),本文詳細(xì)介紹了pip的安裝和使用方法,包括檢查pip是否已安裝、手動(dòng)安裝或升級(jí)pip以及pip的基本使用,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • python圖像平滑處理原理

    python圖像平滑處理原理

    這篇文章主要介紹了python圖像平滑處理原理,圖像濾波是圖像處理和計(jì)算機(jī)視覺中最常用、最基本的操作,文章基于python的相關(guān)資料展開詳細(xì)的內(nèi)容需要的小伙伴可以參考一下
    2022-06-06
  • 深入探討opencv圖像矯正算法實(shí)戰(zhàn)

    深入探討opencv圖像矯正算法實(shí)戰(zhàn)

    在機(jī)器視覺中,對(duì)于圖像的處理有時(shí)候因?yàn)榉胖玫脑驅(qū)е翿OI區(qū)域傾斜,這個(gè)時(shí)候我們會(huì)想辦法把它糾正為正確的角度視角來,本文主要介紹了opencv圖像矯正算法,感興趣的可以了解一下
    2021-05-05
  • Python實(shí)現(xiàn)代碼塊兒折疊

    Python實(shí)現(xiàn)代碼塊兒折疊

    這篇文章主要介紹了Python實(shí)現(xiàn)代碼塊兒折疊方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評(píng)論

五莲县| 凤台县| 武乡县| 上林县| 昭苏县| 淮南市| 遂宁市| 盐池县| 玛曲县| 霍州市| 贡山| 安义县| 调兵山市| 奈曼旗| 阿尔山市| 吉林省| 固原市| 新闻| 丰县| 桓仁| 顺昌县| 高尔夫| 汨罗市| 阜阳市| 苗栗市| 监利县| 景宁| 东阳市| 丹江口市| 崇明县| 洞口县| 青铜峡市| 南华县| 上栗县| 通海县| 分宜县| 五华县| 民丰县| 礼泉县| 九台市| 武乡县|