Python dataclass列表字段:为什么用default_factory

为数据类添加标签列表时,希望每个实例都有自己的列表。field(default_factory=list)可以在需要默认值时创建新列表,避免把可变默认对象的共享关系弄混。

相互隔离的透明开发工作盒
浅色主题概念配图,选自本站AI生成图库;非事件现场或产品实测截图。

工厂是创建对象的函数

default_factory接收可调用对象,所以传list,而不是已经创建好的list()。当实例没有显式传入该字段时,工厂提供默认值。示例创建两条笔记,只修改第一条的标签,第二条应保持空列表。

类型标注不会自动验证全部输入

标注为list[str]有助于工具和读者理解,但dataclass本身不会因此把任意传入值都验证成字符串列表。需要严格校验时,应增加适合业务的检查,不能把类型提示当成完整运行时约束。

显式共享仍然可能发生

如果主动把同一个列表传给两个实例,它们仍可能引用同一个对象。默认工厂解决的是默认值创建方式,不会自动深复制所有输入。测试时既检查默认行为,也检查显式参数的预期语义。

可以运行的练习

from dataclasses import dataclass, field
@dataclass
class Note:
    tags: list[str] = field(default_factory=list)
first = Note()
second = Note()
first.tags.append("Python")
assert first.tags == ["Python"]
assert second.tags == []
print(first.tags, second.tags)

示例已在本地隔离环境运行检查。使用固定输入,不访问外部接口,也不读取真实业务文件。

资料与继续学习

Python:dataclasses。资料查阅日期:2026年9月28日。步骤与练习由本站整理。

资料查阅与编辑日期:2026年9月28日。作者:玖柒。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享