Enum4ライブラリを使用して、次のように列挙型クラスを作成しています。
class Color(Enum):
RED = 1
BLUE = 2
[1, 2]
どこかにリストとして印刷したい。どうすればこれを達成できますか?
Enum4ライブラリを使用して、次のように列挙型クラスを作成しています。
class Color(Enum):
RED = 1
BLUE = 2
[1, 2]
どこかにリストとして印刷したい。どうすればこれを達成できますか?
回答:
IntEnumを使用できます。
from enum import IntEnum
class Color(IntEnum):
RED = 1
BLUE = 2
print(int(Color.RED)) # prints 1
intのリストを取得するには:
enum_list = list(map(int, Color))
print(enum_list) # prints [1, 2]
a = [(int(v), str(v)) for v in Color]
、その後print(a)
。
[(color.value, color.name) for color in Color]
Enumを任意のタイプの値で使用するには、次のことを試してください。
いくつかの改善点を加えて更新しました...ヒントをありがとう、@ Jeff 、!
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 'GREEN'
BLUE = ('blue', '#0000ff')
@staticmethod
def list():
return list(map(lambda c: c.value, Color))
print(Color.list())
結果として:
[1, 'GREEN', ('blue', '#0000ff')]
@classmethod
インスタンスを作成する必要があると思いますColor
。だからこそ、staticmethod
ここでは正しい選択のようです。
@classmethod
し、使用return list(map(lambda c: c.value, cls))
代わり。
@Jeffの回答に基づいて、classmethod
列挙型に同じコードを再利用できるようにを使用するようにリファクタリングしました。
from enum import Enum
class ExtendedEnum(Enum):
@classmethod
def list(cls):
return list(map(lambda c: c.value, cls))
class OperationType(ExtendedEnum):
CREATE = 'CREATE'
STATUS = 'STATUS'
EXPAND = 'EXPAND'
DELETE = 'DELETE'
print(OperationType.list())
生成する:
['CREATE', 'STATUS', 'EXPAND', 'DELETE']
したがって、これにEnum
は__members__
口述があります。@ozgurが提案した解決策は本当に最高ですが、同じことをするこれをより多くの作業で行うことができます
[color.value for color_name, color in Color.__members__.items()]
__members__
あなたはいくつかのクレイジーな状況に...動的に中のものを挿入したい場合、辞書は便利になることができました。
[編集]
どうやら__members__
辞書ではなく、マッププロキシです。つまり、アイテムを簡単に追加することはできません。
ただし、のような奇妙なことを行うことができMyEnum.__dict__['_member_map_']['new_key'] = 'new_value'
、次にMyEnum.new_key
... などの新しいキーを使用できますが、これは実装の詳細にすぎないため、いじってはいけません。黒魔術は莫大な維持費で支払われます。
__members__
か?これは、拡張を許可して、新しいEnum
メンバーを作成する興味深い方法です。...ところで、新しい(私にとっての)属性をテーブルに持ってきたことに賛成です。
利用_member_names_
素早く簡単に結果のために、それは名前だけであれば、つまり、
Color._member_names_
また、あなたは_member_map_
要素の順序付けられた辞書を返すものを持っています。この関数はを返すcollections.OrderedDict
ので、を使用Color._member_names_.items()
しColor._member_names_.values()
て遊ぶことができます。例えば
return list(map(lambda x: x.value, Color._member_map_.values()))
Colorのすべての有効な値を返します