单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点
使用new方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Singleton: def __new__(cls, *args, **kwargs): if not hasattr(cls, "_instance"): cls._instance = super(Singleton, cls).__new__(cls) return cls._instance
class Myclass(Singleton): def __init__(self, a): self.a = a
a = Myclass(10) b = Myclass(20) print(a.a) print(b.a) print(id(a),id(b))
|
装饰器版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| def singleton(cls, *args, **kw): instances = {}
def getinstance(): if cls not in instances: instances[cls] = cls(*args, **kw) return instances[cls]
return getinstance
@singleton class Myclass: pass
a = Myclass() b = Myclass() print(a,b)
|
import方法
1 2 3 4 5 6 7 8 9 10 11
| class My_Singleton(object): def foo(self): pass my_singleton = My_Singleton()
from mysingleton import my_singleton my_singleton.foo()
|