pagination-problem / 2-tile

Studied problem: Pagination problem with two machines and every tile contains only two symbols
0 stars 0 forks source link

Quelle est la bonne façon de faire pour avoir plusieurs constructeurs au sein d'une classe #5

Closed SarahMinich closed 4 years ago

SarahMinich commented 4 years ago

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.

laowantong commented 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.

SarahMinich commented 4 years ago

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».

SarahMinich commented 4 years ago

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.

laowantong commented 4 years ago

Tu as déjà un exemple dans mon code: https://github.com/pagination-problem/tree_structure/blob/21a212f3d6df72d426e10dab92cabf5b80651104/instance.py#L12-L21