2014-02-13 18 views
0

python的裝飾者是一種甜蜜的糖。我用它來宏這樣的函數定義。python是否支持運行時裝飾器?

@logger(level="debug") 
foo(var) 

@repeat(3) 
foo(var) 

他們翻譯foo的功能解析時間,宏觀相似。但我正在尋求在運行時使用裝飾的自由。

foo(var) 

或(注 - 在執行時富(),而不是定義富應用裝飾()

@logger(level="debug") 
@repeat(5) 
foo(var) 

Q1)是否蟒蛇給這樣的自由正式?我不喜歡使用解決方法,因爲我將來會添加/使用更多裝飾器。 Q2)如果不是,下面是讓自由發生的直接方式嗎?如何處理* args和** kwargs?

temp_foo = logger(level="debug", repeat(5, foo, *args)) 
temp_foo(var) 

Q3)python是否有建議支持運行時裝飾器?或者可能有一些想法?

謝謝

+0

裝飾器在運行時在Python評價:http://stackoverflow.com/questions/739654/how-can-i-make-a-chain-of-function-decorators-in-python也許不在Java中。 – User

+0

我之前閱讀過739654。我應該給出更具體的運行時解釋。我期望的RUNTIME執行函數foo(),而不是定義它。 –

回答

0

裝飾器語法,no。但是你仍然可以手動調用它們。最好只使用沒有副作用的修飾器,即不修改傳遞給它的函數的修飾器。

logger(level="debug")(repeat(5)(foo))(var)