Python单例模式各种实现方法的总结和疑惑

本文总结了Python中单例模式的多种实现方式,包括装饰器、__new__方法和元类,并探讨了在实现过程中遇到的问题,如双下划线变量的特性和不同实现方式对属性修改的影响。
摘要由CSDN通过智能技术生成

单例模式的实现有很多种方法,下面列出来在学习过程中遇到的其中几个方法以及在实现过程中的问题

本文没有对具体模块的作用进行说明,可以百度,只记录自己认为重要的东西

1.使用模块的方法,略

2.装饰器


def singleton(cls):
    _instance = {}
    def _wrapper(*args, **kwargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kwargs)
        return _instance[cls]
# 下面这种写法是错误的,__instance为外部作用域,是只读,修改其值会将其变成局部变量,第二次再判断的时候会出现变量未找到,报错
#     _instance = None 
#         if _instance is None:  
#             _instance = cls(*args, **kwargs)  # 这里修改了_instance的值将其变成了局部变量,而上一句判断则会报错
#         return _instance
    return _wrapper

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


a = A('jack')
a.x =1
b = A('tom')
b.x = 2
print(b.x)
print(a.x)
print("a is b :", a is b)
print(a.name)
print(b.name)

"""结果
2
2
a is b : Tru
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值