Python基礎 _ 單例

單例:

    創建一個類對象時 , 系統會開闢一塊專屬於這個對象的空間 , 開闢的動作是由class中的 __new__方法自動完成的 。new方法完成創建空間後,會return空間信息給__init__方法, 由__init__方法進行初始化設置 。那麼每創建一個類對象,都將自動開闢一個新空間 。 

    單例的作用, 就是讓指定的類對象, 只在創建第一個類對象時開闢空間,後面的類對象 ,都沿用這個空間,不再做重新開闢空間的動作。

    應用場景: 音樂播放器 , 登錄框這些,同一時間只能單獨存在的地方。

    簡單的代碼:

class test():   # 創建類
    # 先定義一個空值 , 用來做判斷
    space = None

    '''修改new方法 : 1、判斷類屬性space是不是爲空
        2、調用父類方法開闢新空間
        3return這個空間給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第一次創建好的空間,同理後面的實例對象都在同一個空間了。

    當時研究明白之後,回頭想實現的時候磕磕絆絆的,還是寫下來吧~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章