在這裏有很多關於如何檢測Python裝飾器是否使用參數或不帶參數的答案。它們通常是這樣的:具有可選自調參數的Python裝飾器
class MyDecorator(object):
def __init__(self, *args):
if len(args) == 1 and callable(args[0]):
# no arguments
else:
# arguments
但現在我有以下的用例:
@MyDecorator(lambda x:2*x)
def foo():
pass
這是錯誤地檢測爲「無參數」的情況。
有沒有辦法來檢測這種情況?
[編輯:新增失蹤 '自我' 參數]
您是否嘗試命名參數? – 2013-08-20 10:18:06
@MartijnPieters我認爲這正是問題所在:如果使用一個可調參數調用,「@ MyDecorator」認爲它沒有得到任何「真實」參數,並直接作爲裝飾器工作。在其他情況下,它作爲裝飾者的創造者。而在lambda的情況下,它錯誤地做前者而不是後者。 – glglgl
@Lawnmower你打算在問題中修復'__init__'這行嗎?正如你所建議的一樣,它不能用於這種方式。 – glglgl