class Singleton(object):
def __new__(cls):
if not hasattr(cls, 'instance'):
cls.instance = super(Singleton, cls).__new__(cls)
return cls.instance
if __name__ == '__main__':
s1 = Singleton()
s2 = Singleton()
print(id(s1))
print(id(s2))
print('='*60)
class SingleLazy(object):
_instance = None
def __init__(self):
if self._instance:
print('object created.')
@classmethod
def getInstance(cls):
if not cls._instance:
cls._instance = SingleLazy()
return cls._instance
if __name__ == '__main__':
s1 = SingleLazy.getInstance()
print(id(s1))
s2 = SingleLazy.getInstance()
print(id(s2))
s3 = SingleLazy()
print(id(s3))
print('='*60)
class SingleMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(SingleMeta, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class LoggerDemo(metaclass=SingleMeta):
pass
if __name__ == '__main__':
l1 = LoggerDemo()
l2 = LoggerDemo()
print(id(l1))
print(id(l2))
print('='*60)
# 装饰器
def singleton(cls, *args, **kwargs):
_instances = {}
def _singleton():
if cls not in _instances:
_instances[cls] = cls(*args, **kwargs)
return _instances[cls]
return _singleton
@singleton
class MysqlDB():
pass
if __name__ == '__main__':
db1 = MysqlDB()
db2 = MysqlDB()
print(id(db1))
print(id(db2))
网友评论