侧边栏壁纸
博主头像
张种恩博主等级

一个能运维的 JPG 搬运工

  • 累计撰写 709 篇文章
  • 累计创建 62 个标签
  • 累计收到 27 条评论

目 录CONTENT

文章目录

Python中的单例模式

张种恩
2020-06-24 / 0 评论 / 0 点赞 / 287 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2020-07-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

方式一:类内部实现

# 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

评论区