web-dev-qa-db-ja.com

PythonでintをEnumに変換する方法は?

新しい列挙機能を使用する( backport enum34 経由)python 2.7.6。

次の定義が与えられた場合、intを対応するEnum値に変換するにはどうすればよいですか?

from enum import Enum

class Fruit(Enum):
    Apple = 4
    Orange = 5
    Pear = 6

変換を行うために一連のifステートメントを手作業で作成できることは知っていますが、変換する簡単なPythonの方法はありますか?基本的に、列挙値を返す関数ConvertIntToFruit(int)が欲しいです。

私のユースケースは、各レコードをオブジェクトに読み込むレコードのcsvファイルを持っていることです。ファイルフィールドの1つは、列挙を表す整数フィールドです。オブジェクトに値を設定しているときに、その整数フィールドをファイルからオブジェクト内の対応するEnum値に変換したいと思います。

61
User

Enumクラスを「呼び出す」:

Fruit(5)

5 into Fruit.Orange

>>> from enum import Enum
>>> class Fruit(Enum):
...     Apple = 4
...     Orange = 5
...     Pear = 6
... 
>>> Fruit(5)
<Fruit.Orange: 5>

ドキュメントの 列挙型メンバーとその属性へのプログラムによるアクセス セクションから:

列挙型のメンバーにプログラムでアクセスすると便利な場合があります(つまり、Color.redは、プログラム作成時に正確な色がわからないため、実行しません)。 Enumはそのようなアクセスを許可します:

>>> Color(1)
<Color.red: 1>
>>> Color(3)
<Color.blue: 3>

関連するメモ:列挙型メンバーのnameを含む文字列値をマップするには、サブスクリプションを使用します。

>>> s = 'Apple'
>>> Fruit[s]
<Fruit.Apple: 4>
109
Martijn Pieters

簡単に言うと、intオブジェクトのEnumにアクセスした後、EnumType(int_value)を呼び出してname値をEnumに変換することです:

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

または関数として:

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