Tu devrais décorer ta fonction typed_f avec le décorateur wraps pour avoir accès à tous les attributs de ta fonction d'origine comme par exemple la docstring :
from functools import wraps
def signature(*types):
def get_function(f):
@wraps(f)
def typed_f(*args):
casted_args = []
for a,t in zip(args, types):
try:
casted_args.append(t(a))
except ValueError:
raise Exception("Expected type '{}' got '{}'".format(t, type(a)))
return f(*casted_args)
return typed_f
return get_function
La fonction avec une docstring:
@signature(float, float) # Utilisation
def f(a, b):
"""Retourne la somme de deux nombres."""
return a+b
Sans wraps :
>>> help(f)
Help on function typed_f in module __main__:
typed_f(*args)
Avec wraps:
>>> help(f)
Help on function f in module __main__:
f(a, b)
Fonction qui retourne la somme de deux nombres.