新しい列挙機能を使用する( 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値に変換したいと思います。
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>
簡単に言うと、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