You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:10:05