标题 | Python单例模式实例分析 |
范文 | 本文实例讲述了Python单例模式的使用方法。分享给大家供大家参考。具体如下: 方法一 复制代码 代码如下:import threading class Singleton(object): __instance = None __lock = threading.Lock() # used to synchronize code def __init__(self): "disable the __init__ method" @staticmethod def getInstance(): if not Singleton.__instance: Singleton.__lock.acquire() if not Singleton.__instance: Singleton.__instance = object.__new__(Singleton) object.__init__(Singleton.__instance) Singleton.__lock.release() return Singleton.__instance 1.禁用__init__方法,不能直接创建对象。 2.__instance,单例对象私有化。 静态方法,通过类名直接调用。 4.__lock,代码锁。 5.继承object类,通过调用object的__new__方法创建单例对象,然后调用object的__init__方法完整初始化。 6.双重检查加锁,既可实现线程安全,又使性能不受很大影响。 方法二:使用decorator 复制代码 代码如下:#encoding=utf-8 def singleton(cls): instances = {} def getInstance(): if cls not in instances: instances[cls] = cls() return instances[cls] return getInstance @singleton class SingletonClass: pass if __name__ == '__main__': s = SingletonClass() s2 = SingletonClass() print s print s2 也应该加上线程安全 复制代码 代码如下:import threading class Sing(object): def __init__(): "disable the __init__ method" __inst = None # make it so-called private __lock = threading.Lock() # used to synchronize code @staticmethod def getInst(): Sing.__lock.acquire() if not Sing.__inst: Sing.__inst = object.__new__(Sing) object.__init__(Sing.__inst) Sing.__lock.release() return Sing.__inst 希望本文所述对大家的Python程序设计有所帮助。 |
随便看 |
|
在线学习网范文大全提供好词好句、学习总结、工作总结、演讲稿等写作素材及范文模板,是学习及工作的有利工具。