python之單例模式實現的三種方式

什麼是單例模式?通俗點講:單例模式就是在程序執行的過程當中,類只有一個實例,這不是說單例模式只能去建立一個實例,而是你建立的全部實例(也就是對象)都指的是同一個實例。如何作到這一點呢?咱們的__new__特殊方法就派上用場了,可能你們對這個方法熟悉又陌生,那麼接下來經過一個小程序簡單的過渡一下小程序

class A():
    def __new__(cls):
        return "你好"
    
    def __init__(self):
        print(self)

print(A())

猜測一下,這裏控制檯會輸出什麼?學習

輸出結果:你好

這裏再建立A對象的時候就會先執行__new__方法,而後將返回值傳遞給__init__方法的self,因此結果會是:你好,這這段程序中咱們知道對象的建立是依靠__new__方法的,那麼咱們就能夠經過這個方法入手,每次建立對象的時候在__new__方法內部進行判斷,不拐彎抹角了,直接附上爲小夥伴們準備的代碼。code

class A():
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

    def __init__(self):
        print(self)
        
A()    #輸出結果:<__main__.A object at 0x0000020CED433FD0>
A()    #輸出結果:<__main__.A object at 0x0000020CED433FD0>

此外還有兩種實現單例的方式,我呢也給你們列出來,方便你們學習和參考:對象

# 方式一
def Single(cls,*args,**kwargs):
    instances = {}
    def get_instance (*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return get_instance
@Single
class B:
    pass
    
# 方式二
class Single:
    def __init__(self):
        print("單例模式實現方式二。。。")

single = Single()
del Single  # 每次調用single就能夠了

經過測驗,能夠清晰對比到兩個對象地址是同樣的,可見咱們的目的就達到了,上面三種實現方式
在使用中也略有不一樣,你們能夠根據須要使用。
謝謝你們的支持!get

相關文章
相關標籤/搜索