我有这样Enum的形式
class ItemType(Enum):
ITEM1 = ('Desc1', AnotherEnum.ONE)
ITEM2 = ('Desc2', AnotherEnum.TWO)
Run Code Online (Sandbox Code Playgroud)
我正在尝试ItemType从 JSON 字符串实例化该类型的对象。
例如,我想获得ItemType逻辑上代表字符串的'Desc1'。如果枚举值是ITEM1 = 'Desc1'我可以简单做的形式ItemType('Desc1')。但是在当前的形式中,我不确定如何实现查找方法。
有没有办法做到这一点?
AnEnum只是 a 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__))
Run Code Online (Sandbox Code Playgroud)
然后就可以了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)
Run Code Online (Sandbox Code Playgroud)
我会根据描述查找是否是一件自然而然的事情来做出选择。如果它特定于翻译 JSON,请坚持使用备用构造函数。否则,当然,请选择第二个选项。但是,在这种情况下,我想知道该值是否是存储相关AnotherEnum. 也许你应该有一个方法to_another_enum(),一个替代的构造函数AnotherEnum,或者两者都有......?