繁体   English   中英

键入只能采用枚举值的数据类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM