在 Python 3.14 的 dataclasses 中,字段同时设置 init=False 和 default_factory 时,默认工厂仍会执行。原因不是 init=False 失效,而是生成的 __init__ 需要给该字段赋初值。官方说明指出,default_factory 在需要字段默认值时以零个参数调用;当字段被排除在 __init__ 参数之外又指定了 default_factory,生成的 __init__ 总会调用这个工厂,因为没有别的办法给字段一个初始值。可见,init=False 只表示该字段不作为生成初始化器的参数出现,并不等于完全不初始化。这里只讨论生成的初始化器,不能把结论推广到手写 __init__ 或被替代的初始化路径。对于上海地区运行 Python 3.14 的台式电脑维护程序,若字段用 field(init=False, default_factory=...) 声明,应先确认实际执行的是否为生成初始化器。

适用方面,本说明只覆盖 Python 3.14 标准库 dataclasses 中“字段设置 init=False 且同时设置 default_factory,并由生成的 __init__ 完成初始化”的情形,也仅面向实际授权的台式电脑维护程序及去敏原日志;不执行客户业务,不改生产环境或原始数据。若使用手写 __init__、替换了初始化器,或字段没有同时具备这两个设置,就不应直接套用本题结论。
观察时,先查看数据类定义,确认目标字段是否同时带有 init=False 和 default_factory,并确认工厂是否按零参数定义。结果条件是:两者同时存在且走生成初始化器,便会按零参数调用工厂。若工厂有必填参数,该调用可能报类型错误,不能据此说没有尝试初始化;没有default_factory的字段则另按实际定义核对。接着查看实际初始化路径,确认调用是否来自 dataclasses 生成的 __init__,而不是手写或被替代的初始化器。结果条件是:若生成初始化器存在,且字段未列入参数、工厂在初始化时被调用,则与官方机制相符;若调用来自自定义初始化器,则只能按该初始化器自身逻辑分析。核对时使用去敏的最小定义和去敏日志,不记录业务值、账号、主机名或原始路径。
风险在于,把 init=False 误解成完全不初始化,可能误删 default_factory、误判字段为空或错误修改数据类声明;把生成初始化器的行为推广到手写或被替代的 __init__,也会让排查方向偏离。对于维护程序中的配置容器、列表字段等默认值判断,应先区分生成初始化器与自定义初始化器,避免在未确认机制前改动生产代码或原始数据。
下一步,整理去敏后的数据类字段声明、实际初始化器类型、工厂是否零参数及相关调用记录,保留最小可复核材料;再通过 400-877-9605 咨询。该号码只作咨询,实际范围和安排需确认。
嘉定区用户咨询时可先整理工厂定义、字段标记和已有异常,不发客户配置值。电脑快修网提供信息展示与第三方维修对接,具体地址、能否支持此类电脑侧排查及安排当次确认。