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
相关产品推荐
相关产品推荐

