如何验证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
相关产品推荐
相关产品推荐

