Bonjour,
J'ai un décorateur de classe qui "clone" la classe recue en argument et y ajoute des méthodes.
Pour cloner la classe en python 3, pas de problèmes:
En Python2, le problème est que les old-style classes n'ont pas d'attributs __mro__. Je m'en sors pour l'instant en faisant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 _Decorated_dict = {} _Decorated_dict.update(cls.__dict__) # Adds the initial class _Decorated_dict.update(newcls) # Adds the new methods _Decorated = type(cls.__name__, cls.__mro__, _Decorated_dict)
Le problème est que je perds les ancêtres de la classe initiale.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class _Decorated: pass _Decorated.__dict__.update(cls.__dict__) _Decorated.__dict__.update(newcls)
1) Est-il possible de récupérer les classes parentes (ou encore mieux, la mro) d'une old-style classe ?
2) Je pourrais également dériver la classe initiale, mais j'ai encore du mal à me convaincre que ca revient au même. En règle générale, quelles peuvent être les différences de comportement entre une sous-classe, et un clone altéré d'une classe ?
Merci d'avance.
Partager