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
相关产品推荐
相关产品推荐

