Bonjour,
j'écris une API en python qui gère des widgets, par exemple des boutons divers et variés, et tout un tas de conteneurs (environ 80 types de composants différents). Il y a des règles qui définissent ce qu'un conteneur a le droit de contenir.
Les Widgets et les conteneurs sont représentés par des classes, comme ceci:
class Bouton:
pass
class Glissiere:
pass
class Conteneur:
hierarchy = {Bouton, Glissiere}
Cette partie là fonctionne.
Mon problème est que certain conteneurs peuvent se contenir eux-mêmes (pas tous). Si je reprends mon exemple précédent, je souhaiterais écrire :
class Conteneur:
hierarchy = {Bouton, Glissiere, Conteneur}
Et notre ami python de râler qu'il ne connaît pas la classe Conteneur qui est en train d'être définie. Y a t'il un quelconque artifice syntaxique qui permette de référencer une classe dans sa propre définition, ou suis-je condamné à sortir l'information hiérarchique hors des définitions des classes (par exemple avec un dictionnaire {Conteneur ⇒ {Bouton, Glissiere, Conteneur}, etc.}
# getattr
Posté par foutaises . Évalué à 2.
Salut,
Passe le nom des class en string et ensuite tu les instancies avec getattr
mon_obj = getattr(module, 'Conteneur')()
# Modifier la classe après sa création
Posté par dzamlo . Évalué à 2.
Je pense que la solution la plus simple est de modifier la classe après sa création:
# Constructeur
Posté par Matthieu Moy (site web personnel) . Évalué à 2.
Tu peux initialiser
hierarchy
dans le constructeur :Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.