類裝飾器的單例模式寫法問題導致的類例項地址不同
阿新 • • 發佈:2021-02-07
類裝飾器的單例模式寫法問題導致的類例項地址不同
def singleton(cls): # 單下劃線的作用是這個變數只能在當前模組裡訪問,僅僅是一種提示作用 # 建立一個字典用來儲存類的例項物件 _instance = {} def _singleton(*args, **kwargs): # 先判斷這個類有沒有物件 if cls not in _instance: _instance[cls] = cls(*args, **kwargs) # 建立一個物件,並儲存到字典當中 # 將例項物件返回 return _instance[cls] return _singleton @singleton class A(object): a = 1 def __init__(self, x=0): self.x = x print('這是A的類的初始化方法') class B(object): a = 1 def __init__(self, x=0): self.x = x print('這是B的類的初始化方法') a1 = A(2) a2 = A(3) print(id(a1), id(a2)) print(a1.x,a2.x) b1 = singleton(B)(2) b2 = singleton(B)(3) print(id(b1), id(b2)) print(b1.x,b2.x)
有沒有大神能解釋這個問題