Python中的单例模式

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>
'''

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/py-singleton.html

Buy me a cup of coffee ☕.