Closed SarahMinich closed 4 years ago
Typiquement un problème XY. Utilise le design pattern strategy. Je t'ai déjà donné deux exemples dans: https://github.com/pagination-problem/tree_structure/blob/74af717fd2d05b4104cbf8f99f872a268c108457/fptas.py#L33-L46
De façon générale, has a est mieux que is a (réponse probablement valable aussi pour ton précédent problème d'héritage). Je te renvoie à ton cours de Design Patterns. Tu peux aussi lire https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly/dp/0596007124.
Effectivement, je viens de me rendre compte que j'ai oublié d'écrire une phrase, mon commentaire aurait dû commencer par : J'aimerais pouvoir créer un arbre de deux (voire plus à l'avenir) façons différentes. Pour le moment, je crée un arbre à partir d'un codage de Prüfer. Cependant, j'aimerais aussi avoir la possibilité de créer un arbre généré aléatoirement en écrivant une instruction équivalente à «crée moi aléatoirement un arbre avec n sommets».
Comme le DP Strategy permet «de permuter dynamiquement les algorithmes utilisés dans une application» (cf Wikipédia), je trouve que ce n'est pas ce qu'il me faut ici. En effet, à l'appel, je saurai quel type de création je veux (si je veux passer le codage de Prüfer moi-même ou si je veux une génération aléatoire ou encore même si je donne un autre arbre, je ne sais pas encore). Ce que je ne sais pas, c'est comment offrir ces deux services en même temps.
Tu as déjà un exemple dans mon code: https://github.com/pagination-problem/tree_structure/blob/21a212f3d6df72d426e10dab92cabf5b80651104/instance.py#L12-L21
J'aimerais pouvoir créer un arbre de deux (voire plus à l'avenir) façons différentes. Pour cela, il me faudrait plusieurs "constructeurs" (je sais que je ne devrais pas utiliser ce terme puisque la fonction
__init__
n'est elle même pas un constructeur mais plutôt un... initialisateur ? mais je vais garder cet abus de langage à défaut d'un autre terme approprié). Or, il me semble qu'il n'est pas possible d'avoir plusieurs fonctions__init__
dans une classe en python.J'ai regardé sur le net et il semblerait que les gens ne soient pas vraiment d'accord sur comment faire. Ce post de StackOverflow résume bien la situation mais ne m'aide pas beaucoup à trancher. Pour le moment, j'opte plutôt pour la méthode utilisant les
classmethod
mais je voulais avoir votre avis.