Diciamo che ho un decoratore personalizzato e voglio che gestisca correttamente la docstring della funzione decorata. Il problema è: il mio decoratore aggiunge una discussione.
from functools import wraps
def custom_decorator(f):
@wraps(f)
def wrapper(arg, need_to_do_more):
'''
:param need_to_do_more: if True: do more
'''
args = do_something(arg)
if need_to_do_more:
args = do_more(args)
return f(args)
return wrapper
Puoi vedere che l'argomento non è effettivamente passato alla funzione decorata, ma usato dal wrapper - che può o non può non essere rilevante qui.
Come posso gestire correttamente la documentazione dell'argomento aggiuntivo? È una buona pratica per un wrapper prendere un argomento aggiuntivo, o dovrei evitarlo?
O dovrei piuttosto usare una soluzione diversa, come:
- rendere il wrapper una semplice funzione di ordine superiore, con la funzione che chiama passato come terzo argomento
- refactoring del wrapper in due funzioni separate?