如何在dataclasses-json中处理泛型数据类?需指定何种Marshmallow字段?
问题解决:泛型NodesWrapper解析为dict而非实例及mm_field警告
问题根源
dataclasses_json对泛型类的自动类型推导支持不足,无法识别NodesWrapper[Bar]对应的Marshmallow Schema,导致反序列化时直接返回原始dict,同时触发类型未知的警告。
解决方案
在Foo类的foo字段上,通过field的metadata显式指定对应的Marshmallow Schema,即NodesWrapper[Bar].schema()。
修改后的完整代码
from dataclasses import dataclass, field from typing import Generic, TypeVar from dataclasses_json import dataclass_json T = TypeVar("T") @dataclass_json @dataclass class NodesWrapper(Generic[T]): nodes: list[T] @dataclass_json @dataclass class Bar: bar: str @dataclass_json @dataclass class Foo: foo: NodesWrapper[Bar] = field( metadata={"dataclasses_json": {"mm_field": NodesWrapper[Bar].schema()}} )
验证效果
运行解析代码后,data.foo将成为NodesWrapper[Bar]的实例,警告也会消失:
>>> data = Foo.from_json(f.read()) >>> data Foo(foo=NodesWrapper(nodes=[Bar(bar='baz')])) >>> Foo.schema() # 不再触发警告
内容的提问来源于stack exchange,提问作者M1N3R
相关产品推荐
相关产品推荐

