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>
