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

Python如何实现支持属性访问、值遍历的枚举常量集合

最符合要求的Pythonic实现是使用标准库自带的enum模块,无需引入第三方依赖,天生适配常量定义场景,不可变特性也能避免常量被意外修改。

基础实现(兼容Python 3.4+)

from enum import Enum

# 先定义支持值判断的枚举基类,可复用在所有常量集合定义中
class ValueCheckEnum(Enum):
    @classmethod
    def __contains__(cls, item):
        return item in (member.value for member in cls)

# 定义PDF类型常量集合
class PDF_TYPES(ValueCheckEnum):
    summary = 'summary'
    report = 'report'

# 暴露单个常量供直接导入使用
SUMMARY = PDF_TYPES.summary.value
REPORT = PDF_TYPES.report.value

更简洁的实现(Python 3.11+)

3.11以上版本可以使用StrEnum,枚举成员本身等价于对应字符串值,无需额外调用.value属性:

from enum import StrEnum

class ValueCheckStrEnum(StrEnum):
    @classmethod
    def __contains__(cls, item):
        return item in cls.__members__.values()

class PDF_TYPES(ValueCheckStrEnum):
    summary = 'summary'
    report = 'report'

# 暴露单个常量
SUMMARY = PDF_TYPES.summary
REPORT = PDF_TYPES.report

需求匹配验证

  • 单个常量引用:其他模块可直接通过from xxx import REPORT导入使用,和普通常量用法完全一致
  • 属性访问:导入整个常量集合后,直接使用PDF_TYPES.report即可拿到对应值,比字典访问更简洁
  • 成员判断:直接写if x not in PDF_TYPES:即可判断值是否属于常量集合,完全符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:15:03