對於模塊級的功能,這樣的代碼保存:爲什麼有必要將self作爲方法裝飾器的參數?
def dec(f):
def wrap(*args, **kwargs):
f(*args, **kwargs)
return wrap
@dec
def foo(arg1):
pass
裝修時方法但是,突然間,你必須有一個參數趕實例。
def dec(f):
def wrap(self, *args, **kwargs):
f(self, *args, **kwargs)
return wrap
class Test:
def __init__(self):
pass
@dec
def foo(self, arg1):
pass
這是爲什麼? self
有什麼特別的地方*args
無法捕捉它?畢竟這不僅僅是另一種立場的論點? 另外,它是如何(self
)傳入內部wrap
函數?
對於第一種情況,它僅僅相當於foo = dec(foo)
。從我學習的閉包中,在將foo
作爲參數傳遞給裝飾器之前。它創建了一個包含__closure__
的機箱,因此它可以保留傳遞給foo
的任何參數。
爲什麼當涉及到方法時,顯然self
似乎不是__closure__
的一部分?
滑稽,如果使用在第一實施例的裝飾(所以不需要重新定義分解(f)如方法級),那麼它沒有「自我」的呼喚,也在課堂上工作。 '@dec def foo(arg1):pass'然後將被調用爲Test.foo('bar').. – Uvar