怎样使用这份档案
迁移注解读取代码,不只是把导入名换成 annotationlib。先确认代码是否启用 future import,再根据用途选择格式;不要把返回字符串或 ForwardRef 误当成没有执行代码。关系图可以追溯机制设计、补充规范与实际标准库入口,来源章节可直接回到版本化官方文档。
已核对的语义与阅读建议
- Python 3.14 官方新特性文档列出的发布日期为 2025-10-07;本档案记录的是文档核验,不是软件发布新闻。
- 在 Python 3.14 的默认语义下,函数、类和模块的注解不再在定义时立即求值,而是在需要读取时求值。使用 from __future__ import annotations 的代码仍保留字符串化注解行为,不能把两种情况混为一谈。
- PEP 649 提出通过 __annotate__ 函数延迟计算注解的总体机制;PEP 749 补充其实现细节,并引入 annotationlib。749 是补充,不是取代 649。
- 需要运行时对象时可通过 get_annotations(..., format=Format.VALUE) 读取;若名称仍未定义,VALUE 可能抛出 NameError。
- FORWARDREF 尽量返回已解析的实际值,并用 ForwardRef 表示未解析名称;它不是“完全不求值”模式,也不保证所有表达式都成功。
- STRING 适合把注解呈现为可读文字,但返回文本可能经过空白规范化和常量优化,不是原始源码的逐字副本。
- annotationlib 官方安全章节明确警告:多数功能可执行任意代码。STRING 与 FORWARDREF 均不是无风险沙箱;不要把不可信字符串或对象交给注解内省 API。
- 阅读次序建议:先查 3.14 标准库参考决定 API 语义,再沿 PEP 749 和 649 理解设计沿革。新特性文档提醒 PEP 在实现后通常不持续更新,PEP 中的历史命名和枚举值不可直接当作当前 API。
不能据此保证什么
- 本次没有运行 Python 3.14 兼容性或性能测评,不能据此保证某个第三方框架、装饰器或文档生成器已经兼容。
- 对业务代码的迁移效果仍须在目标 Python 版本和实际依赖组合上测试;文档核验不能替代安全隔离。