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

Python 3.8使用dataclass定义嵌套类及字典属性报错求助

Python Dataclass 报错:TypeError: 'list' object is not callable 解决方法

你的代码里有两处错误触发了这个报错,都是field的default_factory参数使用不当导致的:

错误1:TestInnerData 的 items 字段

  • 类型标注错误:Python 3.8中列表类型注解需用List[int](要从typing模块导入),不能直接写[int]
  • default_factory参数错误:这个参数要求传入可调用对象(比如类、函数),你写的[int]是一个已经创建好的列表实例,不是可调用的。正确写法是default_factory=list,这样每次实例化类时,会自动调用list()生成新的空列表。

错误2:TestData 的 groups 字段

  • default_factory不能传Dict[str, List[TestInnerData]],这是类型注解,不是可调用对象。正确写法是传dict,因为dict()会生成空字典,字段的类型已经在前面标注清楚,不需要重复写在default_factory里。

修正后的完整代码:

from dataclasses import dataclass, field
from typing import Dict, List

@dataclass
class TestData:
    @dataclass
    class TestInnerData:
        name: str = ""
        items: List[int] = field(default_factory=list)
        level: int = 0

    _id: str = ""
    name: str = ""
    groups: Dict[str, List[TestInnerData]] = field(default_factory=dict)


data = TestData(name="test", groups={"xxx": [TestData.TestInnerData(level=2)]})

内容的提问来源于stack exchange,提问作者Moravas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:15:54