Python单例模式实例分析
本文实例讲述了Python单例模式的使用方法。分享给大家供大家参考。具体如下:
方法一
importthreading
classSingleton(object):
__instance=None
__lock=threading.Lock() #usedtosynchronizecode
def__init__(self):
"disablethe__init__method"
@staticmethod
defgetInstance():
ifnotSingleton.__instance:
Singleton.__lock.acquire()
ifnotSingleton.__instance:
Singleton.__instance=object.__new__(Singleton)
object.__init__(Singleton.__instance)
Singleton.__lock.release()
returnSingleton.__instance1.禁用__init__方法,不能直接创建对象。
2.__instance,单例对象私有化。
3.@staticmethod,静态方法,通过类名直接调用。
4.__lock,代码锁。
5.继承object类,通过调用object的__new__方法创建单例对象,然后调用object的__init__方法完整初始化。
6.双重检查加锁,既可实现线程安全,又使性能不受很大影响。
方法二:使用decorator
#encoding=utf-8
defsingleton(cls):
instances={}
defgetInstance():
ifclsnotininstances:
instances[cls]=cls()
returninstances[cls]
returngetInstance
@singleton
classSingletonClass:
pass
if__name__=='__main__':
s=SingletonClass()
s2=SingletonClass()
prints
prints2
也应该加上线程安全
importthreading
classSing(object):
def__init__():
"disablethe__init__method"
__inst=None#makeitso-calledprivate
__lock=threading.Lock()#usedtosynchronizecode
@staticmethod
defgetInst():
Sing.__lock.acquire()
ifnotSing.__inst:
Sing.__inst=object.__new__(Sing)
object.__init__(Sing.__inst)
Sing.__lock.release()
returnSing.__inst
希望本文所述对大家的Python程序设计有所帮助。