+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-04(14)

2020-05(23)

2020-06(49)

2020-07(35)

2020-08(41)

Python代理服务器基于__new__方法实现过程

发布于2021-02-27 15:24     阅读(917)     评论(0)     点赞(30)     收藏(2)


0

1

2

3

4

在这里插入图片描述

通过单例模式,我们可以知道,当我们实现单例时,为了保证线程安全需要在内部加入锁,我们知道,当我们实例化一个对象时,是先执行了类的__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__方法实现的过程了,大家可以试着操作一下。
文章部分内容源于网络,联系侵删*

原文链接:https://blog.csdn.net/zhimaHTTP/article/details/114025845

0

1

2

3

4



所属网站分类: 技术文章 > 博客

作者:集天地之正气

链接: https://www.pythonheidong.com/blog/article/860102/1c78c960fa2b53db1e38/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

30 0
收藏该文
已收藏

评论内容:(最多支持255个字符)