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 : 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)
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
 
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.