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.__instance
1.禁用__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单例模式的实例详解,如有疑问请留言或者到本站的社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!