加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python单例模式的三种实现方式

发布时间:2020-12-20 12:58:24 所属栏目:Python 来源:网络整理
导读:__new__特殊方法实现 class Singleton: def __new__(cls,*args,**kwargs): if not hasattr(cls,'_instance'): cls._instance = super(Singleton,cls).__new__(cls) return cls._instance def __init__(self,name): self.name = names1 = Singleton('first')s
  • __new__特殊方法实现
class Singleton:

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

    def __init__(self,name):
        self.name = name

s1 = Singleton('first')
s2= Singleton('last')
print(s1 == s2)
>> True
print(s1.name)
>> last

tips: __new__方法无法避免触发init(),初始的成员变量会进行覆盖

  • 装饰器实现
def singleton(cls):
    _instance = {}
    def inner(*args,**kwargs):
        if cls not in _instance:
            _instance[cls] = cls(*args,**kwargs)
        return _instance[cls]
    return inner

@singleton
class Test:
    def __init__(self,name):
        self.name = name

t1 = Test('first')
t2 = Test('last')
print(t1==t2)
>> True
print(t2.name)
>> first

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读