- KFC,
Bonjour,
J'ai un petit soucis avec Python 2.
Je cherche a ajouter une argument, avec valeur par defaut, a une signature de fonction (quelque soit cette fonction et sa signature), et que cet argument soit a la fin de la nouvelle signature.
1 2 3 4 5 6 7 8 9 10 11 12 | def inject(function): def wrap_function(*args, **kwargs, c=False): print c return function(*args, **kwargs) return wrap_function @inject def test(a, b): print a, b test(a,b) #OK c = False test(a, b, c=True) # OK |
Pour le moment, je n'ai reussi qu'a obtenir cela:
1 2 3 4 5 6 7 8 9 10 11 | def inject(function): def wrap_function(c, *args, **kwargs): print c return function(warg) return wrap_function @inject def test(a, b): print a, b test(True, 1, 2) |
C'est bien sur embetant pour les signatures des fonctions deja existantes que je devrais modifier dans mon code et par le fait que je ne peux pas utiliser de valeur par defaut.
Une idee en Python 2 ?
EDIT:
Bon en fait j'ai fait comme ceci, avec pour convention que le nouvel argument sera a la fin (c'est pas tres secure m'enfin…):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def inject(function): import inspect @wraps(function) def wrap_function(*args, **kwargs): c = False if 'c' in kwargs: c = kwargs['c'] del kwargs['c'] else: fargs = inspect.getargspec(function) if len(fargs.args) < len(args): c = True args = args[:-1] return function(*args, **kwargs) return wrap_function |
Je prends toute autre idee ou amelioration.
+0
-0