python装饰器实现单例
def singleton(cls_):
cls_._instance = getattr(cls_, "_instance", None)
def decora2(c, *args, **kw):
if c._instance:
return c._instance
else:
c._instance = object.__new__(c, *args, **kw)
return c._instance
cls_.__new__ = decora2
return cls_
from functools import wraps
def singleton(cls_):
_instance = {}
wraps(cls_)
def getInstance(*args, **kw):
if cls_ not in _instance:
_instance[cls_] = cls_(*args, **kw) # cls_.__new__(cls_, *args, **kw)
return _instance[cls_]
return getInstance