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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:45:03