如何解决marshmallow_dataclass - 子类化内置类型
我正在使用棉花糖数据类对可用作字典的文件进行类型检查。 在文件中有一些特殊的数字三元组,它们指定 (typ,min,max) 值。 我想验证这些值并将其存储在特殊类中,子类化 python 的元组。 但是,我一直收到 ValidationError :
这是一个 MWE
from typing import Any,Tuple,List
from marshmallow_dataclass import dataclass
data = {'key1': (1,2,3),'key2': (2,3,4)}
@dataclass
class Triplet(Tuple[int,int,int]):
pass
def someCalculation(self):
pass
@dataclass
class Triplet2(List):
pass
def someCalculation(self):
pass
@dataclass
class MySchema:
key1: Tuple[int,int]
key2: Triplet
schema = MySchema.Schema().load(data)
print(schema)
我已经尝试对 List 和 Tuple 进行子类化,但是我的尝试都没有按预期工作。 有没有办法使用我的 Triplet 课程?
解决方法
幸运的是,我发现 pre_load
的 marshmallow
装饰器能够满足我的需求。
在这个函数中,我返回一个带有我想要的键的字典,所以 Triplet 类被正确实例化
from typing import Any,Tuple,List
from marshmallow_dataclass import dataclass
from marshmallow import pre_load
data = {'key1': (1,2,3),'key2': (2,3,4)}
@dataclass
class Triplet:
typ: float
min: float
max: float
@pre_load
def preprocess(self,data,**kwargs):
return {'typ': data[0],'min': data[1],'max': data[2]}
def someCalculation(self):
pass
@dataclass
class MySchema:
key1: Tuple[int,int,int]
key2: Triplet
schema = MySchema.Schema().load(data)
print(schema)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。