J'ai défini l'énumération suivante
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
maintenant la valeur imprimée est
D.x
à la place, je voulais que la valeur de l'énumération soit imprimée
1
Que peut-on faire pour obtenir cette fonctionnalité?
python
python-3.x
enums
python-3.4
Vaibhav Mishra
la source
la source
Réponses:
Vous imprimez l' objet enum . Utilisez l'
.value
attribut si vous vouliez simplement imprimer cela:Voir l' accès aux membres de la Programmatic énumération et leurs attributs section :
Vous pouvez ajouter une
__str__
méthode à votre énumération, si tout ce que vous vouliez était de fournir une représentation sous forme de chaîne personnalisée:Démo:
la source
if D.x == 10: ...
. Quelle approche dois-je adopter pour les nombres entiers?D.x
est l'objet enum,D.x.value
est une valeur entière. Si les valeurs d'énumération doivent agir comme des entiers, utilisez leIntEnum
type , où chaque élément est une sous-classe deint
et doncIntEnumD.x == 10
fonctionnerait.def __eq__(self, other): return int(self.value) == other
etdef __int__(self): return int(self.value)
mais je pense toujours que je dois utiliser.value
sur des cas où je n'utilise pas de comparaison__eq__
implémentation ne fonctionne pas quandother
est une autre valeur enum;D.x == D.y
, oùD.x.value == D.y.value
serait vrai, échouerait par exemple. Il semble que vous souhaitiez utiliser à laIntEnum
place deEnum
là.J'ai implémenté l'accès en utilisant ce qui suit
maintenant je peux juste faire
print(D.x)
obtenir1
comme résultat.Vous pouvez également utiliser
self.name
si vous souhaitez imprimer à lax
place de1
.la source
self._value_
?return str(self.value)
est plus simple.self.value
est plus propre.value
comme nom sur votre type enum).J'ai trouvé cette page lors de la recherche pour accéder à un en
Enum
utilisant une chaîne. Je sais que ce n'est pas ce qui est demandé dans cette question particulière, mais le titre le «suggère».Pour obtenir une énumération à l'aide d'une chaîne, vous pouvez effectuer les opérations suivantes:
la source