You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

代码说明:

  1. __init__方法:在枚举成员初始化时,为每个成员添加input_str属性,对应你需要的输入字符串("true"/"false")
  2. _missing_类方法:这是Enum类的内置钩子,当传入的value无法匹配任何成员的value时,会自动调用这个方法。我们在这里遍历所有成员,匹配input_str,找到对应成员返回。

内容的提问来源于stack exchange,提问作者Darpan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:45:10