Sto provando a passare argomenti facoltativi al mio decoratore di classi in python. sotto il codice ho attualmente:Argomenti decoratore classe 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
Il secondo decoratore con argomenti per sovrascrivere quello di default (max_hits=10, timeout=5
nella mia funzione __init__
), non funziona e ho avuto l'eccezione TypeError: __init__() takes at least 2 arguments (3 given)
. Ho provato molte soluzioni e ho letto articoli a riguardo, ma qui non riesco ancora a farlo funzionare.
Qualche idea per risolvere questo? Grazie!
Grazie ragazzi e @lunixbochs per la vostra soluzione! Funziona come un fascino :) – Dachmt
Se lo sviluppatore chiama 'Cache' con argomenti posizionali invece di parole chiave (es. '@Cache (100,50)'), a 'funzione' verrà assegnato il valore 100 e' max_hits' 50. An l'errore non verrà generato fino alla chiamata della funzione. Questo potrebbe essere considerato un comportamento sorprendente poiché la maggior parte delle persone si aspetta una semantica di parole chiave e posizionale uniforme. – unutbu