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
デフォルトの1(私の__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