为了账号安全,请及时绑定邮箱和手机立即绑定

python 如何理解单例模式?

python 如何理解单例模式?

繁花不似锦 2019-02-24 20:57:33
def singleton(cls): instances = {} def getInstance(): if cls not in instances: instances[cls] = cls() return instances[cls] return getInstance @singleton class A(object):pass @singleton class B(object):pass a1=A() a2=A() b1=B() b2=B() print id(a1),id(a2) print id(b1),id(b2) 结果 (<__main__.A at 0x7f0921e03f50>, <__main__.A at 0x7f0921e03f50>) (<__main__.B instance at 0x7f0921dbe440>, <__main__.B instance at 0x7f0921dbe440>) 如上, 怎么理解 singleton中的变量 instances ? instances 在运行中如何存贮实例呢? 请大牛指教
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

同意依云的说法,你这个写法虽然工作,但是貌似下面这种方式更被推荐。注意需要继承自object。

class Singleton(object):
    INSTANCE = None

    def __new__(cls, *args, **kwargs):
        if not cls.INSTANCE:
            cls.INSTANCE = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls.INSTANCE


a = Singleton()
b = Singleton()
assert id(a) == id(b)
print isinstance(a, Singleton)

当用作装饰器时,局部变量的生存周期发生了变化,不再是伴随函数的结束而释放了,否则无法存储内部数据。

查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 485 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信