J'essaie de définir un décorateur de classe. J'ai un problème avec la méthode __init__
en classe décorée. Si la méthode __init__
invoque super
la RuntimeError
profondeur de récursivité maximale dépassée est élevée.Décorateur de classe Python et profondeur de récursivité maximale dépassée
Exemple de code:
def decorate(cls):
class NewClass(cls): pass
return NewClass
@decorate
class Foo(object):
def __init__(self, *args, **kwargs):
super(Foo, self).__init__(*args, **kwargs)
Qu'est-ce que je fais mal?
Merci, Michał
Modifier 1
Merci à Mike réponse boers je me suis rendu à cette question est correcte que dois-je faire pour que achive super (Foo, auto) pointer à la classe appropriée.
J'ai aussi deux limitations. Je veux appeler la méthode Foo.__init__
et je ne peux pas modifier la définition de classe Foo
.
Edit 2
J'ai résolu ce problème. Je modifie le corps de la fonction décorateur. Je ne retourne pas de nouvelle classe. Au lieu d'envelopper des méthodes de classe orginal.
double possible de [classe, héritage, décorateurs super(), et la récursivité maximale] (http://stackoverflow.com/questions/2542747/class-decorators-inheritance-super-and-maximum-recursion) –
Comment pouvez-vous appliquer un décorateur à la classe Foo mais vous ne pouvez pas changer sa définition? –
J'écris ajax validation django app. Il devrait être générique et ne nécessite pas de changements dans la définition de classe de formulaire. –