python單例模式的裝飾器

from functools import wraps
def singleton(cls):
    instance = None
    @wraps(cls)
    def wrap(*args,**kwargs):
        nonlocal instance
        if instance is None:
            instance = cls(*args,**kwargs)    #args,kwargs是用於將參數傳遞到__init__中
        return instance
    return wrap
@singleton
class A:
    pass
a = A()
a1 = A()
id(a)
id(a1)

wKiom1iXNNqTkg9fAAAT07myMpY808.png

注:python

    能夠看到不管有多少個實例,都是共享一個地址ide

原理:get

    在實例化類以前,先判斷此類是否已經被實例化過(經過instance是否爲空判斷),若是已經實例化過則直接返回已經實例化的類,若是沒有被實例化過,則進行實例化
it

總結:io

    裝飾器也能夠用到類上面
class

相關文章
相關標籤/搜索