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

Python中如何为变量添加类型提示以限制其为Enum成员名称?

解决方案

我们可以通过提取DataFormatOptions的成员名称来动态生成Literal类型,避免重复定义字段的可选值:

实现步骤

  • 从Enum的__members__.keys()中获取所有成员名称的元组
  • 基于这个元组创建Literal类型别名
  • 在DataFormat类中使用该类型别名作为name字段的类型提示

完整代码

from enum import Enum
from typing import Literal, TypeVar
from pydantic import BaseModel

class DataFormatOptions(Enum):
    calibrate = "Calibrate"
    lrs = "LRS"
    custom = "Custom"

# 动态提取Enum成员名称生成Literal类型
DataFormatName = Literal[tuple(DataFormatOptions.__members__.keys())]

_E = TypeVar("_E", bound=DataFormatOptions)

class DataFormat(BaseModel):
    name: DataFormatName  # 自动关联Enum成员名称:"calibrate"、"lrs"、"custom"
    displayName: DataFormatOptions

优化(Python 3.11+)

如果使用Python 3.11及以上版本,可以用TypeAlias明确标记类型别名,提升代码可读性:

from typing import TypeAlias

# 明确标记为类型别名
DataFormatName: TypeAlias = Literal[tuple(DataFormatOptions.__members__.keys())]

这种方式的优势在于,后续DataFormatOptions添加或删除成员时,name字段的类型提示会自动同步更新,无需手动修改Literal的内容,完全复用了Enum的定义,避免了重复维护的麻烦。

内容的提问来源于stack exchange,提问作者André Ricardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:56:14