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
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下