很多人把裝飾器搞的很複雜,其實本質很簡單.
首先,什麼是裝飾器呢?在代碼中發現戴着@xxx帽子的,就是裝飾器.
那要怎麼自己定義一個裝飾器呢?
其實任何一個接收一個參數的callable都可以用來做裝飾器,比如函數和類.為方便起見,下面的例子都用函數來說明.
def deco(func):return 1
這裡,deco就可以做裝飾器.
@deco
def f(args):pass
"戴帽"其實就是調用,帽子戴在誰(一個函數定義)頭上,就表示將誰作參數來調用,然後賦給一個同名變量.
上面的例子等價於f = deco(f).結果是函數f變成了1.
當然,我們用裝飾器可不是用來返回1的.我們主要......
閱讀全文