Existe-t-il un moyen d'écrire des décorateurs dans une structure de classe qui s'intègre bien? Par exemple, cela fonctionne très bien sans cours:Décorateurs et dans la classe
def wrap1(func):
def loc(*args,**kwargs):
print 1
return func(*args,**kwargs)
return loc
def wrap2(func):
def loc(*args,**kwargs):
print 2
return func(*args,**kwargs)
return loc
def wrap3(func):
def loc(*args,**kwargs):
print 3
return func(*args,**kwargs)
return loc
def merger(func):
return wrap1(wrap2(wrap3(func)))
@merger
def merged():
print "merged"
@wrap1
@wrap2
@wrap3
def individually_wrapped():
print "individually wrapped"
merged()
individually_wrapped()
La sortie est:
1
2
3
merged
1
2
3
individually wrapped
qui est ce que je veux. Mais maintenant disons que je veux faire merged
et individually_wrapped
comme méthodes statiques ou de classe. Cela fonctionnera également, tant que les décorateurs sont tenus à l'écart de l'espace de nom de classe. Y at-il un bon moyen de mettre les décorateurs dans l'espace de noms? Je préfère ne pas énumérer toutes les façons qui ne fonctionneront pas, mais le problème principal est que si merger
est une méthode, il ne peut pas accéder aux méthodes wrapX
. Peut-être que c'est une chose stupide à vouloir faire, mais quelqu'un at-il quelque chose comme ça à travailler, avec tous les décorateurs et méthodes décorées dans la même classe?
Je pense que c'est la voie à suivre, il n'y a pas de raison de les garder en classe –