[英]Typing dataclass that can only take enum values
我有一个数据类,它可以采用作为枚举一部分的值。
class MyEnum(Enum):
A = "valueA"
B = "valueB"
@dataclass
class MyDataclass:
value: MyEnum
创建我的数据类时,类型不匹配,因为它正在考虑str
!= MyEnum.A
。
param = MyDataclass(value="valueA")
关于如何输入MyDataclass
的任何建议?
编辑:数据类正在使用我从另一个 API 收到的字符串值进行初始化
如果您真的希望MyDataclass().value
成为MyEnum
值,则您的类输入正确。 问题是,作为实例化MyDataclass
的人,您负责将MyEnum
类型的值实际传递给__init__
。
如果您的用例需要传递一个字符串,则您必须自己在__post_init__
中处理转换,这确实意味着稍微改变类定义。
from dataclasses import dataclass, InitVar, field
@dataclass
class MyDataclass:
value: MyEnum = field(init=False)
value_str: InitVar[str]
def __post_init__(self, value_str):
self.value = MyEnum(value_str)
自动转换将需要不同的库,例如 Pydantic 或(我相信) attrs
; 这不是dataclasses
提供的功能。
这为您提供的静态类型保护的数量是有限的,因为您声明任何字符串都可以作为参数传递给__init__
/ __post_init__
,但实际上只有作为MyEnum
有效参数的字符串才有效。 这并不是真正可以使用typing
模块表达的东西,因为Enum
本身在设计时并没有考虑到静态类型检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.