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

簡(jiǎn)單了解python單例模式的幾種寫(xiě)法

 更新時(shí)間:2019年07月01日 08:53:05   作者:FOOFISH-PYTHON之禪  
這篇文章主要介紹了簡(jiǎn)單了解python單例模式的幾種寫(xiě)法,文中通過(guò)示例代碼介紹的非常詳細(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ì)象的方法,所以重寫(xiě)基類的__new__方法,以此來(lái)保證創(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

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

相關(guān)文章

最新評(píng)論

怀化市| 岳阳市| 砀山县| 澄江县| 张掖市| 介休市| 澎湖县| 日土县| 信宜市| 洮南市| 姚安县| 武邑县| 古交市| 泰宁县| 台湾省| 三台县| 和平区| 通山县| 台南县| 昌邑市| 玉田县| 南澳县| 拜城县| 耿马| 福鼎市| 岫岩| 牟定县| 越西县| 攀枝花市| 永春县| 桐庐县| 延津县| 崇文区| 扎兰屯市| 合川市| 洪湖市| 通山县| 岳阳县| 崇明县| 东乌珠穆沁旗| 托克逊县|