Singleton 單例模式
阿新 • • 發佈:2022-03-26
-
單例是一種設計模式,應用該模式的類只會生成一個例項。對外提供一個全域性訪問點(例如配置檔案)
-
使用函式裝飾器實現單例
-
使用類裝飾器實現單例
-
使用 new 關鍵字實現單例
-
使用 metaclass 實現單例
重寫 new 方法
class Singleton: _obj = None _init_flag = True def __new__(cls, *args, **kwargs): if cls._obj == None: cls._obj = object.__new__(cls) return cls._obj def __init__(self, name): if Singleton._init_flag: print('init......') self.name = name Singleton._init_flag = False a = Singleton('a') b = Singleton('b') print(a) print(b)
使用裝飾器實現
def singleton(cls): _obj = {} def inner(*args, **kwargs): if cls not in _obj: _obj[cls] = cls() return _obj[cls] return inner @singleton class Cls: def __init__(self,): print('init...') pass a = Cls() b = Cls() print(a) print(b)
類裝飾器實現
class Singleton: def __init__(self, cls): self.cls = cls self.obj = {} def __call__(self, *args, **kwargs): if self.cls not in self.obj: self.obj[self.cls] = self.cls() return self.obj[self.cls] @Singleton class Cls: def __init__(self): print('init...') a = Cls() b = Cls() print(a) print(b)