單例:
創建一個類對象時 , 系統會開闢一塊專屬於這個對象的空間 , 開闢的動作是由class中的 __new__方法自動完成的 。new方法完成創建空間後,會return空間信息給__init__方法, 由__init__方法進行初始化設置 。那麼每創建一個類對象,都將自動開闢一個新空間 。
單例的作用, 就是讓指定的類對象, 只在創建第一個類對象時開闢空間,後面的類對象 ,都沿用這個空間,不再做重新開闢空間的動作。
應用場景: 音樂播放器 , 登錄框這些,同一時間只能單獨存在的地方。
簡單的代碼:
class test(): # 創建類 # 先定義一個空值 , 用來做判斷 space = None '''修改new方法 : 1、判斷類屬性space是不是爲空 2、調用父類方法開闢新空間 3、return這個空間給init''' def __new__(cls, *args, **kwargs): if cls.space is None: cls.space = super().__new__(cls) return cls.space '''初始化方法隨便搞一下''' def __init__(self): print(66) a = test() b=a c= test() print(id(a),id(b),id(c))
此時三個實例對象a,b,c的id位置一致,運行結果:
66 66 615122232600 615122232600 615122232600 Process finished with exit code 0
代碼實現思路: 判斷類屬性space是不是爲空,第一個實例對象創建時,space=None,此時調用父類方法創建一個空間 (因爲父類的new方法本身就會創建空間,這裏不需要考慮如何進行創建,只需調用就會自動創建),並return ,等到第二次有新的實例對象時,space已經不爲空了,會直接return第一次創建好的空間,同理後面的實例對象都在同一個空間了。
當時研究明白之後,回頭想實現的時候磕磕絆絆的,還是寫下來吧~~~