python单例模式实现
# 在实例化时控制检查
class Logger(object):
    _instance = None
    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance  = super(Logger, cls).__new__(cls, *args, **kwargs)
        return cls._instance
log1 = Logger()
log2 = Logger()
print(log1 is log2)
# 通过装饰器实现
from functools import wraps
def singleton(cls):
    __instances = {}
    @wraps(cls)
    def wrapper(*args, **kwargs):
        if cls not in __instances:
            __instances[cls] = cls(*args, **kwargs)
        return __instances[cls]
    return wrapper
@singleton
class Loo(object):
    pass
log1 = Loo()
log2 = Loo()
print(log1 is log2)
class Singleton(type):
    _instances = {}
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
        return cls._instances[cls]
class Logg(metaclass=Singleton):
    pass
log1 = Logg()
log2 = Logg()
print(log1 is log2)