三种常见的单例模式
#单例模式 #装饰器版本 def singleton(cls): instances = {} def getinstance(): if cls not in instances: instances[cls] = cls() return instances[cls] return getinstance @singleton class Myclass: pass ins1 = Myclass() ins2 = Myclass() print(id(ins1),id(ins2))#43877264 43877264 #import方法 --> 天然的单例模式 #mysingleton.py 一个py文件 class My_Singleton(object): def foo(self): pass my_singleton = My_Singleton() #to use from mysingleton # import my_singleton 在另外一个文件中导入类的实例对象 my_singleton.foo() #使用__new__方法 class Singleton(object): def __new__(cls): if not hasattr(cls,'_instance'): orig = super(Singleton,cls) cls._instance = orig.__new__(cls) return cls._instance # class MyClass(singleton): # a = 1 ins3 = Singleton() ins4 = Singleton() print(id(ins3),id(ins4))#43877656 43877656