单例类
- 单例类采用重载new方法,返回一个类对象
- 实例化的类对象由new方法生成
- new方法在 init方法调用前调用
- 每次创建新对象时,返回相同的类对象
类的单例装饰器
- cls表示对类的引用(函数装饰器一般用func,表示对函数的引用)
- 将类实例存放在字典中,利用类的引用作key,保证类对象的唯一性
# 使用__new__
class Singleton(object):
def __new__(cls):
if not hasattr(cls, 'instance'):
cls.instance = super(Singleton, cls).__new__(cls)
return cls.instance
# 使用装饰器
def singleton(cls):
instance = dict()
def get_instance(*args, **kwargs):
if cls not in instance:
instance[cls] = cls(*args, **kwargs)
return instance[cls]
return get_instance
@singleton
class TEST(object):
pass
if __name__ == '__main__':
o1 = Singleton()
o2 = Singleton()
print id(o1), id(o2)
m1 = TEST()
m2 = TEST()
print id(m1), id(m2)
to-do 加上信息的装饰器
代码对比不加类装饰器的情况
Java实现单例模式
github: https://github.com/buptxiaomiao/python_trick/blob/master/singleton.py
网友评论