python中基于__new__方法实现的单例设计模式

本文介绍了Python中如何通过__new__方法实现单例设计模式。在Python中,实例化过程先调用类的__new__方法,再执行__init__进行初始化。同时提到了元类在单例模式中的作用,即type的__call__方法会触发类的__new__和__init__方法。
摘要由CSDN通过智能技术生成

首先我们的明白,当我们实例化一个对象时,是先执行了类的__new__方法(我们没写时默认调用object.__new__),实例化对象;

然后再执行类的__init__方法,对这个对象进行初始化

import threading
class Singleton(object):
    _instance_lock = threading.Lock()
    
    def __init__(self):
        pass
    def __new__(cls,*args,**kwargs):
        if not hasattr(Singleton,"_instance"):
            with Singleton._instance_lock:
                Singleton._instance = object.__new__(cls)
        return Singleton._instance
obj1 = Singleton()
obj2 = Singleton()
print(obj1,obj2)

def task(arg):
    obj = Singleton()
    print(obj)

for i in range(10):
    t = threading.Thread(target=task,args=[i,])
    t.start()
<__main__.Singleton object at 0x000002A6870055F8> 
<__main__.Singleton object at 0x000002A6870055F8>
<__main__.Singleton object at 0x000002A6870055F8>
<__main__.Singl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值