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

簡單了解python單例模式的幾種寫法

 更新時(shí)間:2019年07月01日 08:53:05   作者:FOOFISH-PYTHON之禪  
這篇文章主要介紹了簡單了解python單例模式的幾種寫法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

方法一:使用裝飾器

裝飾器維護(hù)一個(gè)字典對(duì)象instances,緩存了所有單例類,只要單例不存在則創(chuàng)建,已經(jīng)存在直接返回該實(shí)例對(duì)象。

def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@singleton
class Foo(object):
pass
foo1 = Foo()
foo2 = Foo()
print foo1 is foo2

方法二:使用基類

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

class Singleton(object):
def __new__(cls, *args, **kwargs):
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 # True

方法三:使用元類

元類(參考:深刻理解Python中的元類)是用于創(chuàng)建類對(duì)象的類,類對(duì)象創(chuàng)建實(shí)例對(duì)象時(shí)一定會(huì)調(diào)用__call__方法,因此在調(diào)用__call__時(shí)候保證始終只創(chuàng)建一個(gè)實(shí)例即可,type是python中的一個(gè)元類。

class Singleton(type):
def __call__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instance
class Foo(object):
__metaclass__ = Singleton
foo1 = Foo()
foo2 = Foo()
print foo1 is foo2 # True

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

宣城市| 岱山县| 从化市| 凤冈县| 阆中市| 饶河县| 定州市| 尉氏县| 武功县| 施秉县| 宜昌市| 江山市| 灯塔市| 塔城市| 金沙县| 农安县| 泽库县| 贵定县| 桦川县| 林州市| 承德县| 林周县| 江永县| 广河县| 小金县| 镶黄旗| 河源市| 奉化市| 澄迈县| 沁阳市| 泽普县| 龙游县| 米易县| 西乌珠穆沁旗| 淳化县| 龙游县| 鹤壁市| 洞头县| 平远县| 江永县| 山西省|