本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名原文链接~~~

Python中的单例模式

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:


方式一:类内部实现

# import time
import threading

class Singleton(object):
    instance = None # 静态字段/类变量
    lock = threading.RLock()
    def __init__(self, name):
        '''初始化对象'''
        self.name = name

    def __new__(cls, *args, **kwargs):
        '''
        创建对象
        '''
        if cls.instance:
            return cls.instance

        with cls.lock:
            if not cls.instance:
                # time.sleep(0.2)
                cls.instance = object.__new__(cls)
            return cls.instance


print(Singleton('zze'))
print(Singleton('lcq'))

'''
<__main__.Singleton object at 0x01822FD0>
<__main__.Singleton object at 0x01822FD0>
'''

方式二:模块导入实现

首先约定单例的对象都在指定 py 文件中创建,我这里新建一个 singletons.py 文件内容如下:

class Foo(object):
    pass


foo = Foo()

在其它 py 文件中直接从 singletons.py 中导入要使用的对象,被导入的都是同一个对象:

from singletons import foo

print(foo)

from singletons import foo

print(foo)

'''
<singletons.Foo object at 0x00332EC8>
<singletons.Foo object at 0x00332EC8>
'''

如果这篇文章对您有帮助,可点击下方链接分享给你的朋友们😋,如果遇到问题欢迎评论、留言~~~😇

评论

公众号:zze_coding

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×