微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用类装饰器实现单例模式?

如何解决如何使用类装饰器实现单例模式?

我想使用类装饰器来实现python单例模式。 我使用了两种写法,但是我没有得到相同的类实例地址。

def singleton(cls):
    _instance = {}
    def _singleton(*args,**kwargs):
        if cls not in _instance:
            _instance[cls] = cls(*args,**kwargs)
        return _instance[cls]
    return _singleton

@singleton
class A(object):
    def __init__(self):
        print('A __init__')

class B(object):
    def __init__(self):
        print('B __init__')

a1 = A()
a2 = A()
print(id(a1),id(a2))
b1 = singleton(B)()
b2 = singleton(B)()
print(id(b1),id(b2))

A __init__
2777380227448 2777380227448
B __init__
B __init__
2777380227952 2777380237776

类实例的两个地址不一样。我不明白它是如何工作的。这不就是编写类装饰器的两种方式吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。