五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

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

發(fā)布日期:2022-03-11 15:44 | 文章來源:源碼之家

基本介紹

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

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

特點:全局唯一,允許更改

優(yōu)缺點

優(yōu)點:

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

缺點:

  • 沒有接口,不能繼承,與單一職責(zé)原則沖突,一個類應(yīng)該只關(guān)心內(nèi)部邏輯,而不關(guān)心外面怎么樣來實例化

Python實現(xiàn)

方式1,元類實現(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):
 pass

if __name__ == "__main__":
 ins = Singleton()
 print(id(ins))
 ins = Singleton()
 print(id(ins))

方式2,繼承實現(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):
 pass

if __name__ == "__main__":
 ins = Singleton()
 print(id(ins))
 ins = Singleton()
 print(id(ins))

方式3,裝飾器實現(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

@warpper
class Singleton:
 pass

if __name__ == "__main__":
 ins = Singleton()
 print(id(ins))
 ins = Singleton()
 print(id(ins))

方式4,模塊實現(xiàn):

- foo.py --> ins = Singleton()
- bar.py --> from foo import ins

方式5,@classmethod實現(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實現(xiàn)單例模式的5種方法的文章就介紹到這了,更多相關(guān)Python 單例模式內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

海外穩(wěn)定服務(wù)器

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部