Python基于__new__方法实现
最新资讯发布日期:2021-02-19 14:20:59          

Python基于__new__方法实现.png

通过单例模式,我们可以知道,当我们实现单例时,为了保证线程安全需要在内部加入锁,我们知道,当我们实例化一个对象时,是先执行了类的__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:

                if not hasattr(Singleton, "_instance"):

                    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 0x038B33D0> <__main__.Singleton object at 0x038B33D0>

<__main__.Singleton object at 0x038B33D0>

<__main__.Singleton object at 0x038B33D0>

<__main__.Singleton object at 0x038B33D0>

<__main__.Singleton object at 0x038B33D0>

<__main__.Singleton object at 0x038B33D0>

<__main__.Singleton object at 0x038B33D0>

<__main__.Singleton object at 0x038B33D0>

<__main__.Singleton object at 0x038B33D0>

<__main__.Singleton object at 0x038B33D0>

<__main__.Singleton object at 0x038B33D0>

 采用这种方式的单例模式,以后实例化对象时,和平时实例化对象的方法一样 obj = Singleton()


上述就是关于__new__方法实现的过程了,大家可以试着操作一下。


文章部分内容源于网络,联系侵删*


在线
咨询

售前客服

即刻响应,有问必答

售后客服

永久免费售后服务

太阳大客户经理

18652201770
微信客服
免费
套餐
意见
反馈
置顶