當我們理解了Python的__new__方法後,我們還可以利用它來做一些其他有趣的事情,比如實現設計模式中的單例模式(singleton) 。
因為類每一次實例化後產生的過程都是通過__new__來控制的,所以通過重載__new__方法,我們可以很簡單的實現單例模式。
先看在python3中怎麼實現單例模式:
class Singleton(object):
def __new__(cls):
if not hasattr(cls, 'instance'):
cls.instance = super(Singleton, cls).__new__(cls)
return cls.instance
if __name__ == '__main__':
a = Singleton()
b = Singleton()
print(id(a))
print(id(b))
輸出的id相同,這裡被實例化出來的a和b都指向同一個對象,說明在內存中只存在一個實例化的對象,通過重寫new方法,這樣的單例模式實現起來簡單。