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

如何验证Python Dataclass属性的Enum枚举值?

无需外部校验的dataclass Enum属性约束方案

方法一:利用dataclass内置的__post_init__做内部校验与转换

在你的my_class中添加__post_init__方法,自动将传入的dataType转换为CheckTheseDataTypes枚举成员,非法值会直接抛出ValueError,完全替代外部校验逻辑:

from dataclasses import dataclass
from enum import Enum

class CheckTheseDataTypes(str, Enum):
    FIRST = "int"
    SECOND = "float"
    THIRD = "string"

@dataclass
class my_class:
    id: str
    dataType: CheckTheseDataTypes

    def __post_init__(self):
        # 自动转换并校验,非法值触发ValueError
        self.dataType = CheckTheseDataTypes(self.dataType)

使用示例:

  • 合法实例化:my_class(id="001", dataType="int") 或 my_class(id="001", dataType=CheckTheseDataTypes.FIRST) 均正常
  • 非法值触发错误:传入"bool"这类不在枚举内的字符串时,直接抛出ValueError,无需额外判断

方法二:用Pydantic Dataclass自动完成校验

如果项目允许引入第三方库,Pydantic的dataclass会自动处理枚举类型的校验与转换,无需手动编写逻辑:

首先安装Pydantic:

pip install pydantic

代码实现:

from pydantic.dataclasses import dataclass
from enum import Enum

class CheckTheseDataTypes(str, Enum):
    FIRST = "int"
    SECOND = "float"
    THIRD = "string"

@dataclass
class my_class:
    id: str
    dataType: CheckTheseDataTypes

这种方式下,实例化时传入非法值会直接抛出ValidationError,同时支持直接传入枚举成员或对应的字符串值,全程无需外部校验代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:10:46