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

Python(mypy)强类型枚举使用:解决Enum.value类型推断为Any的问题

解决方案

方案1:使用标准库IntEnum(仅适配整数值枚举)

这是成本最低的适配方案,IntEnum是enum模块原生提供的整数值枚举专用基类,mypy对其有原生类型支持,直接替换原有Enum基类即可:

from enum import IntEnum

class Role(IntEnum):
    ENG = 0
    PRODUCT = 1
    BUSINESS = 2
    FOUNDER = 3

a = Role(2)
a.value  # mypy 会正确推断为int类型

方案2:自定义泛型枚举基类(适配任意类型的枚举值)

如果你的枚举值不局限于整数,想要通用的类型推断能力,可以自己实现一个带泛型参数的枚举基类,后续定义枚举时直接指定值的类型即可:

from enum import Enum
from typing import Generic, TypeVar

T = TypeVar('T')

class TypedEnum(Generic[T], Enum):
    # 显式声明value的类型为泛型参数T
    value: T

# 定义枚举时指定值的类型为int
class Role(TypedEnum[int]):
    ENG = 0
    PRODUCT = 1
    BUSINESS = 2
    FOUNDER = 3

a = Role(2)
a.value  # mypy 准确推断为int类型

如果枚举值是字符串类型,仅需将TypedEnum[int]改为TypedEnum[str]即可,支持所有值类型的枚举定义。

补充说明

  • 两种方案都无需修改现有枚举的业务逻辑,仅调整基类声明即可
  • 如果同一个枚举类下存在不同类型的枚举值,mypy会自动将value推断为所有值类型的联合类型,符合实际使用预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:15:02