假設出於管理原因,我沒有對模塊xxx的寫訪問權限。如何在一個你不能訪問的函數上使用python裝飾器?
我想要做的事,如:
from xxx import yyy
@myDeco
yyy
這當然會失敗。
我想我能做到
yyy = myDeco(yyy)
但有使用@myDeco
「符號的方法嗎?或者這只是前def
?
假設出於管理原因,我沒有對模塊xxx的寫訪問權限。如何在一個你不能訪問的函數上使用python裝飾器?
我想要做的事,如:
from xxx import yyy
@myDeco
yyy
這當然會失敗。
我想我能做到
yyy = myDeco(yyy)
但有使用@myDeco
「符號的方法嗎?或者這只是前def
?
在Python參考文檔,Compound Statements部分,它說:
decorated ::= decorators (classdef | funcdef)
decorators ::= decorator+
decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE
funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite
這是語法規則的一部分。正如你所看到的,修飾器只應用於功能或類定義之前,這是def <funcname>
開始的地方。它繼續,注意:
函數定義可能被一個或多個修飾器 表達式包裝。在包含函數定義的範圍中定義函數 時評估裝飾器表達式。
也就是說,記住,裝修其實只是語法糖,以前他們提供形式:
func = decorate_func(func)
代替。因此,如果你所擁有的只是某個變量中的函數對象,則不能使用裝飾器語法糖,並且必須恢復到第二種方法。
的@
語法僅前允許立即允許。def
或class
換句話說,你只能使用第二種形式。 – Keith