侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

绿泡泡:___zze,添加备注来意

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Python中的单例模式

zze
zze
2020-06-24 / 0 评论 / 0 点赞 / 488 阅读 / 1228 字

方式一:类内部实现

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

评论区