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))
单例模式总结
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...