午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

Python實(shí)現(xiàn)單例模式的5種方法

瀏覽:13日期:2022-06-16 18:21:50
目錄基本介紹優(yōu)缺點(diǎn)Python實(shí)現(xiàn)方式1,元類實(shí)現(xiàn):方式2,繼承實(shí)現(xiàn):方式3,裝飾器實(shí)現(xiàn):方式4,模塊實(shí)現(xiàn):方式5,@classmethod實(shí)現(xiàn)單例模式:基本介紹

一個(gè)對象只允許被一次創(chuàng)建,一個(gè)類只能創(chuàng)建一個(gè)對象,并且提供一個(gè)全局訪問點(diǎn)。

單例模式應(yīng)該是應(yīng)用最廣泛,實(shí)現(xiàn)最簡單的一種創(chuàng)建型模式。

特點(diǎn):全局唯一,允許更改

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

避免對資源的多重占用,如寫入文件操作 節(jié)省內(nèi)存 防止命名空間被污染

缺點(diǎn):

沒有接口,不能繼承,與單一職責(zé)原則沖突,一個(gè)類應(yīng)該只關(guān)心內(nèi)部邏輯,而不關(guān)心外面怎么樣來實(shí)例化Python實(shí)現(xiàn)方式1,元類實(shí)現(xiàn):

class MetaClass(type): def __call__(self, *args, **kwargs):'''self : class Singleton'''if not hasattr(self, 'ins'): insObject = super(__class__, self).__call__(*args, **kwargs) setattr(self, 'ins', insObject)return getattr(self, 'ins')class Singleton(object, metaclass=MetaClass): passif __name__ == '__main__': ins = Singleton() print(id(ins)) ins = Singleton() print(id(ins))方式2,繼承實(shí)現(xiàn):

class ParentClass: def __new__(cls, *args, **kwargs) -> object:'''cls : class Singeton'''if not hasattr(cls, 'ins'): insObject = super(__class__, cls).__new__(cls, *args, **kwargs) setattr(cls, 'ins', insObject)return getattr(cls, 'ins')class Singleton(ParentClass): passif __name__ == '__main__': ins = Singleton() print(id(ins)) ins = Singleton() print(id(ins))方式3,裝飾器實(shí)現(xiàn):

def warpper(clsObject): def inner(*args, **kwargs):if not hasattr(clsObject, 'ins'): insObject = clsObject(*args, **kwargs) setattr(clsObject, 'ins', insObject)return getattr(clsObject, 'ins') return inner@warpperclass Singleton: passif __name__ == '__main__': ins = Singleton() print(id(ins)) ins = Singleton() print(id(ins))方式4,模塊實(shí)現(xiàn):

- foo.py --> ins = Singleton()- bar.py --> from foo import ins方式5,@classmethod實(shí)現(xiàn)單例模式:

class Singleton: @classmethod def getSingletonInstanceObject(cls, *args, **kwargs):if not hasattr(cls, 'ins'): insObject = cls(*args, **kwargs) setattr(cls, 'ins', insObject)return getattr(cls, 'ins')if __name__ == '__main__': ins = Singleton.getSingletonInstanceObject() print(id(ins)) ins = Singleton.getSingletonInstanceObject() print(id(ins))

到此這篇關(guān)于Python實(shí)現(xiàn)單例模式的5種方法的文章就介紹到這了,更多相關(guān)Python 單例模式內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 插菊综合网 | 亚洲欧美另类视频 | 国产精品麻豆免费版 | 成人女同在线观看 | 草草草在线观看 | 日韩三级在线免费观看 | 色综合视频在线 | 国产系列在线 | 91国产免费视频 | 国内久久 | 国产高清免费av | 五月天久久综合 | 亚洲第一区视频 | 精品999视频| 超碰激情在线 | 欧美三级在线视频 | 91麻豆精品91久久久久同性 | 神马影院一区二区 | 麻豆欧美 | 欧美日韩久久久久久 | jizz国产 | 91在线网 | 日本黄色小视频在线观看 | 日韩毛片在线 | 99久久99久久精品国产片果冰 | 神马久久精品综合 | 亚洲区小说区图片区qvod | 538精品在线观看 | 亚洲美女毛片 | 日本国产在线观看 | 日本二区在线观看 | 久久国产香蕉视频 | 亚洲欧美在线观看视频 | 国产视频第一页 | 国产精品久久久久久久久久免费看 | 中文在线观看视频 | 新国产视频 | 欧美人与牛zoz0性行为 | 琪琪色在线观看 | 黄色免费网站在线看 | 五月婷婷伊人网 |