gpt4 book ai didi

Python 3.8+ 使用英安岩进行嵌套数据对象类型验证

转载 作者:行者123 更新时间:2023-12-05 05:51:13 27 4
gpt4 key购买 nike

我对重新分级嵌套数据对象有疑问。

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

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))

但是我有一个数据类型检查函数和类型转换函数与示例中的数据类 A 相关联。我在哪里使用 inspect.signature(A).parameters 获取数据类的预期类型并检查数据是否属于预期类型。我们也可以从 B 类中调用 A 类的签名吗?或者有什么解决方法吗?谢谢。

类型当前类型检查代码是这样的:

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

最佳答案

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

@dataclass
class A:
x: str
y: int

def __post_init__(self) -> None:
assert self.y > 0, 'y must be greater than zero'

关于Python 3.8+ 使用英安岩进行嵌套数据对象类型验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70420525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com