單例模式是一種常用的設計模式,Python 語言也提供了簡單易用的方法來實現單例模式。在 Python 中,單例模式可以通過使用 __new__ 方法來實現。
class Singleton: __instance = None # 用于存放單例實例 def __new__(cls): if cls.__instance is None: cls.__instance = object.__new__(cls) return cls.__instance # 創建實例 s1 = Singleton() s2 = Singleton() # 判斷實例是否相等 print(s1 is s2) # 輸出 True
在上述代碼中,實現了一個 Singleton 類,并重寫了 __new__ 方法。在 __new__ 方法中,首先判斷存放單例實例的 __instance 是否為 None。如果是,則調用父類 object 的 __new__ 方法創建該實例;如果不是,則直接返回 __instance。這樣就可以保證每次創建實例時只會創建一個實例。
為了方便使用,也可以將 Singleton 類設計為一個裝飾器。
def singleton(cls): instances = {} def wrapper(): if cls not in instances: instances[cls] = cls() return instances[cls] return wrapper @singleton class MyClass: pass # 創建實例 s1 = MyClass() s2 = MyClass() # 判斷實例是否相等 print(s1 is s2) # 輸出 True
在這種情況下,當使用 MyClass 類時,會自動調用 singleton 函數,返回一個 wrapper 函數,并將其賦值給 MyClass 類。當創建 MyClass 的實例時,就會調用 wrapper 函數,判斷實例是否已經存在,如果存在就直接返回,如果不存在就創建并返回。這樣就完成了單例模式的實現。