python3 类的单例模式

class Singleton():
    __instance = None

    def __init__(self):
        print("我是init方法.")

    def __new__(cls):
        if not Singleton.__instance:
            Singleton.__instance = object.__new__(cls)
        return Singleton.__instance


obj1 = Singleton()
obj2 = Singleton()
print(id(obj1), id(obj2))

执行结果:

我是init方法.
我是init方法.
42790640 42790640

使用锁的单例模式

from threading import Lock


l = Lock()


class Singleton():
    __instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            l.acquire()  # 保证安全
            cls.__instance = object.__new__(cls)
            l.release()  # 保证安全
        return cls.__instance

    def __init__(self):
        pass


s1 = Singleton()
s2 = Singleton()
print(s1, s2)  # 内存相等

 执行结果:

<__main__.Singleton object at 0x000000000292EF28> <__main__.Singleton object at 0x000000000292EF28>
原文地址:https://www.cnblogs.com/lilyxiaoyy/p/10929206.html