2015-11-13 8 views
9

実行時にYAMLファイルの値を読み込んで列挙型を作成したいと考えています。だから私はこれを持っています:Pythonでカスタム値を持つ列挙型を動的に作成しますか?

# Fetch the values 
v = {'foo':42, 'bar':24} 

# Create the enum 
e = type('Enum',(), v) 

適切な方法はありますか?私はtypeが非常にきちんとした解決策ではないと感じる。

+0

私はなぜあなたの 'Enum'が持つ' e.foo'と 'e.bar'割り当てられ、このような奇妙な値を持つ属性があり、非常によく分かりません。 「Enum」ではない! – Nhor

+0

@Nhorそれでは何ですか?私は 'typedef enum {ソーダ= 3423、花= 5827、水= 999} articles_t;のようないくつかの列挙型があるCライブラリからラッパーを書いています – nowox

+0

大変申し訳ありません私の悪い – Nhor

答えて

12

あなたはEnum functional APIを使用して、新しい列挙型を作成することがあります。

In [1]: import enum 

In [2]: DynamicEnum = enum.Enum('DynamicEnum', {'foo':42, 'bar':24}) 

In [3]: type(DynamicEnum) 
Out[3]: enum.EnumMeta 

In [4]: DynamicEnum.foo 
Out[4]: <DynamicEnum.foo: 42> 

In [5]: DynamicEnum.bar 
Out[5]: <DynamicEnum.bar: 24> 

In [6]: list(DynamicEnum) 
Out[6]: [<DynamicEnum.foo: 42>, <DynamicEnum.bar: 24>] 
+0

私は私たちが'class MyEnum(IntEnum):_list = [" A "、" B "、" C "]' – PascalVKooten

+0

@PascalvKooten '{name:indexのインデックス、列挙する名前(the_list) } '。それはダイナミック(それを調べていない)では動作しませんが、静的な場合は自動的に動作します。 https://repl.it/@altendky/SevereGiftedDuckbillcat – altendky

関連する問題