首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用dacite进行3.8+嵌套数据对象类型验证

用dacite进行3.8+嵌套数据对象类型验证
EN

Stack Overflow用户
提问于 2021-12-20 10:36:28
回答 1查看 396关注 0票数 3

我有一个问题,重新分级嵌套的数据对象。

正如其他文章(Creating nested dataclass objects in Python)中所建议的那样,我们可以使用dacite包创建嵌套的数据对象。这适用于处理我们嵌套的字典结构中的数据。

代码语言:javascript
复制
from dataclasses import dataclass
from dacite import from_dict

@dataclass
class A:
    x: str
    y: int

@dataclass
class B:
    a: A

data = {
    'a': {
        'x': 'test',
        'y': 1,
    }
}

result = from_dict(data_class=B, data=data)

assert result == B(a=A(x='test', y=1))

但是,我有一个数据类型检查函数和类型转换函数,它与示例中的dataclass A相关联。其中,我使用inspect.signature(A).parameters获取数据集的预期类型,并检查数据是否为预期类型。我们是否也可以将A类的签名称为B类的签名,或者在这方面有任何工作要做?谢谢。

当前类型的检查代码如下所示:

代码语言:javascript
复制
expected_para = inspect.signature(A).parameters
def type_check(d_f: dict, expected_para):
    d_new = {}
    for k in expected_para.keys():
        # get expected type
        expected_type = expected_para[k].annotation
        # check if k in d_f
        if k in d_f.keys():
            # check type
            v = d_f[k]
           #type conversion here
            d_new[k] = self.typeconversion(expected_type, v)
        else:
            d_new[k] = None
    return d_new
EN

回答 1

Stack Overflow用户

发布于 2022-01-25 18:15:45

您可以使用这样的__post_init__()编写验证函数:

代码语言:javascript
复制
@dataclass
class A:
    x: str
    y: int

    def __post_init__(self) -> None:
        assert self.y > 0, 'y must be greater than zero'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70420525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档