Bonjour à tous,
j'essaye d'exploiter les @decorateur de python pour inscrire dans un registre ( un dict tout simplement ) une fonction.
Pour me simplifier la tache, décorateur et fonction ont des paramètres.
si dessous un code qui ne fonctionne pas
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 import functools # mon registre registry_model = {} # ma class fake class Klass(object):pass # dans mon implémentation, j'utilise les metaclass pour enregistrer mon model registry_model["Klass"] = {} def register_io_write(model=None, _type="xml"): " Register io write function for the model in _type context" def decorated(func): @functools.wraps(func) def wrapper(*args, **kwargs): registry_model[model.__name__].update({("io","write", _type):func}) return func(*args, **kwargs) return wrapper def decorator(func): return decorated(func) return decorator @register_io_write(Klass, "xml") def write_model(*args, **kwargs): print args, kwargs print registry_model print "Done"
en faite, je ne passe jamais dans la fonction wrapper
et si je sort de cette fonction, je ne connait plus la fonction decorée
peut être n'est ce pas possible ? ou sinon je me perd dans mon raisonnement avec les décorateurs
une idée à me soumettre, une piste à suivre?
merci pour vos lumières
Kermit
Partager