Utilisation de la nouvelle fonctionnalité Enum (via backport enum34 ) avec python 2.7.6.
Étant donné la définition suivante, comment puis-je convertir un int en la valeur Enum correspondante?
from enum import Enum
class Fruit(Enum):
Apple = 4
Orange = 5
Pear = 6
Je sais que je peux fabriquer à la main une série d'instructions if pour effectuer la conversion, mais existe-t-il un moyen Pythonic facile de convertir? Fondamentalement, je voudrais une fonction ConvertIntToFruit (int) qui renvoie une valeur énumérée.
Mon cas d'utilisation est que j'ai un fichier csv d'enregistrements où je lis chaque enregistrement dans un objet. L'un des champs de fichier est un champ entier qui représente une énumération. Comme je remplis l'objet, je voudrais convertir ce champ entier du fichier en la valeur Enum correspondante dans l'objet.
Vous 'appelez' la classe Enum
:
Fruit(5)
tourner 5
en Fruit.Orange
:
>>> from enum import Enum
>>> class Fruit(Enum):
... Apple = 4
... Orange = 5
... Pear = 6
...
>>> Fruit(5)
<Fruit.Orange: 5>
De la section Accès par programmation aux membres d'énumération et à leurs attributs de la documentation:
Parfois, il est utile d'accéder aux membres dans les énumérations par programmation (c'est-à-dire dans les situations où
Color.red
ne le fera pas car la couleur exacte n'est pas connue au moment de l'écriture du programme).Enum
permet un tel accès:>>> Color(1) <Color.red: 1> >>> Color(3) <Color.blue: 3>
Dans une note connexe: pour mapper une valeur de chaîne contenant le nom d'un membre enum, utilisez l'abonnement:
>>> s = 'Apple'
>>> Fruit[s]
<Fruit.Apple: 4>
Je pense que c'est en termes simples est de convertir la valeur de int
en Enum
en appelant EnumType(int_value)
, après quoi accéder au name
du Enum
objet:
my_fruit_from_int = Fruit(5) #convert to int
fruit_name = my_fruit_from_int.name #get the name
print(fruit_name) #Orange will be printed here
Ou en fonction:
def convert_int_to_fruit(int_value):
try:
my_fruit_from_int = Fruit(int_value)
return my_fruit_from_int.name
except:
return None