Enum
はちょうどclass
なので、代替コンストラクタはどうですか?それは最も明白です。
class ItemType(Enum):
ITEM1 = ('Desc1', AnotherEnum.ONE)
ITEM2 = ('Desc2', AnotherEnum.TWO)
@classmethod
def from_description(cls, description):
for item in cls:
if item.value[0] == description:
return item
raise ValueError("%r is not a valid %s description" % (description, cls.__name__))
次に、ItemType.from_description('Desc1')
を実行できます。また
、あなたはItemType('Desc1')
は、Python 3.6のようあなたが_missing_
を実装することができ、ちょうど仕事をしたい場合:
class ItemType(Enum):
ITEM1 = ('Desc1', AnotherEnum.ONE)
ITEM2 = ('Desc2', AnotherEnum.TWO)
@classmethod
def _missing_(cls, value):
for item in cls:
if item.value[0] == value:
return item
return super()._missing_(value)
私が説明で見上げることはやるかしないように自然なことであるかどうかに私の選択をベースにしたいです。 JSONの変換に固有の場合は、代わりにコンストラクタを使用してください。さもなければ、確かに、この第2のオプションのために行きなさい。しかし、その場合には、その値が関連するものを保存する最も良い場所であるかどうか疑問に思うでしょうAnotherEnum
。代わりにto_another_enum()
というメソッド、AnotherEnum
の代替コンストラクタ、またはその両方を持つべきでしょうか?
辞書を使用します。 – kindall
'class'または' Enum'の値の代わりに? – KDecker
'Desc'という名前の別の列挙を使うと、' ItemType(Desc( 'Desc1')) ' – smac89