L'avenir compatible avec les enums 2.7?
De nombreuses méthodes de mise en œuvre de enums sont indiqués dans les réponses aux cette question. Cependant, PEP0435 est maintenant et décrit comment Enum et IntEnum deviendra officielle en Python 3.4.
Ma question n'est pas sur les avantages/inconvénients de certaines façons de simuler les enums en Python. Mais j'aimerais des conseils sur les plus avant-compatibile pour ceux d'entre nous toujours bloqué à 2.X libère.
flufl.enum a été à l'origine être l'implémentation de référence mais a été abandonné en raison de membres n'étant pas des instances du type (et de permettre à des sous-classes avec d'autres membres dans le même temps). Ce dernier n'affecte pas beaucoup la journée-à-jour, mais peut-être l'ancien pourrait causer plus de problèmes?
Y a des bibliothèques qui ressemblent plus à ce qui est ajouté à 3.4 et sont compatibles avec 2,7+?
- C'est un non-problème. À l'aide de votre roulés à la main les énumérations ne va pas casser lorsque "officiel" des enums sont libérés. De Plus, ne pas utiliser les énumérations. Ce n'est pas C.
- 3.4 mise en œuvre s'appuie sur la nouvelle
__prepare__
fonction de la métaclasse, de sorte que le portage dos à 2,7 va être.. un défi, mais un arrière-port pourrait être possible encore. Mieux coller à vos roulés à la main; qu'ils vont continuer à travailler, mais pas tout à fait avoir tous les avantages de l'officiel du module. - Comme le langage se développe, il devient de plus en plus de gens qui sont moins disposés à s'adapter, et donc de la circonscription pour le C-comme des constructions grandit.
- utiliser les énumérations". Plutôt que de l'argument ad hominem que "ce n'est pas C", pourriez-vous justifier votre point de vue. Qu'est-ce que la base de votre argument que les types énumérés ne devrait pas exister en Python (et peut-être dans toutes les autres langues)? Désireux d'apprendre, merci.
- Ce n'est pas un ad hominem. Vous pourriez peut-être apprendre la signification des phrases avant de les utiliser dans la conversaion. Les Enums existent pour permettre à l'vaguement typesafe d'affectation de noms, de numéros de C. étant Donné que python variables non typées, et les utilisateurs peuvent créer leurs propres types, il n'est pas besoin d'une telle fonctionnalité.
- Notez que l'une des principales utilisations des énumérations (si ce n'est la seule) est de sélectionner des cas dans un switch/case déclaration, qui python manque aussi.
- Merci pour l'info. Une utilisation supplémentaire pour les enums est lors de la persistance des objets sur le disque, ou de les transmettre sur un réseau à un autre système - par exemple, vous pourriez avoir besoin d'un fil de la représentation de la lecture d'une carte de la même couleur (trèfle, cœur, carreau, pique).
- C'est vraiment rien que les nombres entiers peuvent pas le faire. Encore une fois, vos classes devraient être en mesure de serialise eux-mêmes comme des entiers si vous voulez. Encore une fois, avec XML et JSON de la résolution de la nécessité de créer des fils dans tous les formats, mais la plupart des applications spécialisées, ce n'est pas trop pressant.
- J'étais sceptique au sujet des enums en Python... cependant le fait que Guido a béni PEP435 est tout à fait convaincante, il y a de bonnes justifications dans le PEP lui-même. Moi aussi, je venu ici à la recherche d'compatible mise en œuvre de PEP435 enums pour Py2.7...
- les énumérations sont (comme son nom l'indique) une énumération. En Python, je ne veux même pas leur nombre. Leur point est de spécifier une collection limitée. E. g. un ensemble de 5 facile à se souvenir de choses dans un sac. – Chiffres ne sont pas faciles à retenir (pour les non-nombre de choses se rapportant), ni limitée, par exemple de 5 valeurs.
- Vous pouvez spécifier une collection d'objets si vous le souhaitez. Étant donné que les variables sont typées, et les particularités de type enum n'ajoute pas beaucoup.
- permet de parler sur chat.stackoverflow.com/rooms/6/python d'accord?
- chat.stackoverflow.com/transcript/message/22165077#22165077
- Les Variables sont typées, mais les objets sont saisis. Et les valeurs de l'enum sont vraiment tapé.
Vous devez vous connecter pour publier un commentaire.
Il y a un rétroportage de la PEP 435 enum module disponible sur PyPI comme enum34. Le backport semble être officieux de, cependant il est écrit par Ethan Furman, qui est un Python de base livreur et l'un des co-auteurs de PEP 435.
Le backport est déclarée compatible avec Python 2.4 et supérieur. Bien sûr, sous Python 2 il y a quelques, relativement mineur, les différences de comportement, mais de mon examen préliminaire en vertu de l'Pyhon 2.7, je dirais que le niveau de compatibilité est assez élevé.
En fonction de votre utilisation, vous pouvez être en mesure de s'en tirer avec l'aide de cette de la bibliothèque, ce qui permet également le pattern matching.