我試圖將可選參數傳遞給我的類裝飾器在python中。 下面的代碼我目前有:Python類裝飾器參數
class Cache(object):
def __init__(self, function, max_hits=10, timeout=5):
self.function = function
self.max_hits = max_hits
self.timeout = timeout
self.cache = {}
def __call__(self, *args):
# Here the code returning the correct thing.
@Cache
def double(x):
return x * 2
@Cache(max_hits=100, timeout=50)
def double(x):
return x * 2
第二個裝飾用的參數覆蓋(在我__init__
功能max_hits=10, timeout=5
)默認的,不工作,我得到異常TypeError: __init__() takes at least 2 arguments (3 given)
。我嘗試了很多解決方案,並閱讀了關於它的文章,但在這裏我仍然無法完成工作。
任何想法解決這個?謝謝!
感謝你們和@lunixbochs的解決方案!像一個魅力工作:) – Dachmt
如果開發人員用位置而不是關鍵字參數調用'Cache'(例如'@Cache(100,50)'),那麼'function'將被分配值100和'max_hits' 50.一個在調用該函數之前不會引發錯誤。這可以被認爲是令人驚訝的行爲,因爲大多數人期望統一的位置和關鍵字語義。 – unutbu