Python dataclasses如何正确使用default_factory初始化含列表的defaultdict列表
正确实现方案
原有代码错误点
- 类字段定义不能加
self.前缀,self.b: int属于语法错误,dataclass的字段直接在类作用域下定义即可 - 缺少必要的依赖导入声明
修正后完整代码
from dataclasses import dataclass, field from collections import defaultdict @dataclass class MyClass: b: int cache: list = field(default_factory=list) def __post_init__(self): self.cache = [defaultdict(list) for _ in range(self.b)]
使用示例
# 实例化时传入长度参数b=5,会自动生成包含5个defaultdict(list)的cache obj = MyClass(b=5) # 测试存值 obj.cache[0]["key1"].append("test") print(obj.cache[0]["key1"]) # 输出 ['test']
逻辑说明
dataclass自动生成的初始化方法会先完成b参数的赋值,之后自动执行__post_init__方法,在该方法中基于已经赋值的b生成对应长度的defaultdict列表,直接覆盖默认生成的空cache列表,完全符合需求。
内容的提问来源于stack exchange,提问作者Cookie
相关产品推荐
相关产品推荐

