Python下singleton模式的实现方法
很多开发人员在刚开始学Python时,都考虑过像c++那样来实现singleton模式,但后来会发现c++是c++,Python是Python,不能简单的进行模仿。
Python中常见的方法是借助global变量,或者class变量来实现单件。本文就介绍以decorator来实现singleton模式的方法。示例代码如下:
##-----------------------codebegin-----------------------
#-*-coding:utf-8-*-
defsingleton(cls):
"""Defineaclasswithasingletoninstance."""
instances={}
defgetinstance(*args,**kwds):
returninstances.setdefault(cls,cls(*args,**kwds))
returngetinstance
##1未来版Python支持ClassDecorator时可以这样用
classFoo(object):
def__init__(self,attr=1):
self.attr=attr
Foo=singleton(Foo)##22.5及之前版不支持ClassDecorator时可以这样用
if__name__=="__main__":
ins1=Foo(2)#等效于:ins1=singleton(Foo)(2)
print"Foo(2)->id(ins)=%d,ins.attr=%d,%s"%(id(ins1),ins1.attr,('error','ok')[ins1.attr==2])
ins2=Foo(3)
print"Foo(3)->id(ins)=%d,ins.attr=%d,%s"%(id(ins2),ins2.attr,('error','ok')[ins2.attr==2])
ins2.attr=5
print"ins.attr=5->ins.attr=%d,%s"%(ins2.attr,('error','ok')[ins2.attr==5])
##------------------------codeend------------------------
输出:
Foo(2)->id(ins)=19295376,ins.attr=2,ok Foo(3)->id(ins)=19295376,ins.attr=2,ok ins.attr=5->ins.attr=5,ok
热门推荐
10 祝女儿简短祝福语大全
11 大学新年祝福语简短创意
12 元旦适合的祝福语简短
13 朋友出远门祝福语简短
14 初六简短的祝福语
15 祝男孩生日祝福语简短
16 同事调离的祝福语简短
17 拜年红包的祝福语简短
18 妈妈生日祝福语简短励志