如何让Python Enum支持多输入映射?同时返回指定枚举值
解决方案
你可以通过重写Enum类的_missing_方法,并为枚举成员添加自定义属性来实现需求:
import enum class YesOrNo(enum.Enum): YES = "Y" NO = "N" def __init__(self, value): # 为每个成员绑定对应的输入匹配字符串 self.input_str = "true" if self.name == "YES" else "false" @classmethod def _missing_(cls, value): # 当默认按value查找失败时,尝试匹配input_str for member in cls: if member.input_str == value: return member # 都匹配不上时抛出标准异常 raise ValueError(f"{value} is not a valid {cls.__name__}")
效果验证:
- 调用
YesOrNo("true")会返回YesOrNo.YES,调用YesOrNo("false")返回YesOrNo.NO - 获取
YesOrNo.YES.value结果为"Y",YesOrNo.NO.value结果为"N" - 同时保留原有的按value调用能力:
YesOrNo("Y")也能返回YesOrNo.YES
代码说明:
__init__方法:在枚举成员初始化时,为每个成员添加input_str属性,对应你需要的输入字符串("true"/"false")_missing_类方法:这是Enum类的内置钩子,当传入的value无法匹配任何成员的value时,会自动调用这个方法。我们在这里遍历所有成员,匹配input_str,找到对应成员返回。
内容的提问来源于stack exchange,提问作者Darpan
相关产品推荐
相关产品推荐

