web-dev-qa-db-fra.com

Comment convertir int en Enum en python?

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.

61
User

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>
109
Martijn Pieters

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
1
Ali Ezzat Odeh