old-style class: mro ou classes parentes
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:
Code:
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) |
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:
1 2 3 4
|
class _Decorated: pass
_Decorated.__dict__.update(cls.__dict__)
_Decorated.__dict__.update(newcls) |
Le problème est que je perds les ancêtres de la classe initiale.
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.