Il y a eu quelques questions sur la façon d'implémenter des énumérations en Python. La plupart des solutions finissent par être plus ou moins équivalent à quelque chose comme ceci:Conception Pythonic sans énumération
class Animal:
DOG=1
CAT=2
D'autres ont suggérer des moyens plus complexes de la construction énumérations, mais ultimatly l'ont tendance à ressembler à cet exemple quand tout est dit et fait. Basé sur mon expérience en Java et en C#, je peux penser à toutes sortes d'utilisations pour un tel idiome. Cependant, il ne semble pas être très Pythonic. En fait, il semble que chaque fois que quelqu'un demande pourquoi il n'y a pas d'énumération dans Python, vous avez tendance à vous plaindre de la façon dont il n'y a aucune raison d'essayer de forcer la sécurité du type de compilation dans un langage comme Python, ou comment les conceptions qui nécessitent des énumérations sont de mauvaises odeurs en Python.
Ma question n'est pas de savoir comment implémenter des enums en Python, mais comment en général les gens abordent des solutions à des problèmes qui se prêtent aux énumérations de façon Pythonienne. En d'autres termes, comment résoudriez-vous un problème qui se prête à un type de données avec un ensemble discret de valeurs possibles sans porter votre solution Java/C# à Python.
Je ne vois pas pourquoi l'exemple que vous avez donné est un-Pythonic. Et si je mettais en œuvre une machine d'état, je profiterais des fonctions en tant qu'objets et définirais mes états en tant que fonctions. –
Je ne sais pas car il y a quelque chose de particulièrement faux sur la façon dont l'énumération a été implémentée, mais j'ai juste l'impression que certaines personnes dans la communauté Python considèrent les solutions qui nécessitent des énumérations comme non-Pythonic. Votre suggestion qu'une machine d'état soit mise en application utilisant des fonctions de première classe comme état est un bon début à une réponse cependant! – jlund3