技术档案 / 文档核验记录
文档核验4 项官方资料

Python 3.14 注解求值:从 PEP 设计到 annotationlib 的使用边界

读取 Python 注解时,何时需要真实值,何时保留前向引用,何时只展示文字?这份文档核验档案串起 Python 3.14、PEP 649、PEP 749 与 annotationlib,帮助维护运行时类型工具和文档生成器的开发者选择入口,并识别不能交给不可信输入的求值边界。

核验时间: · 本站公开:2026-09-08

怎样使用这份档案

迁移注解读取代码,不只是把导入名换成 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 版本和实际依赖组合上测试;文档核验不能替代安全隔离。

核验要点与对应证据

在 Python 3.14 的默认语义下,函数、类和模块的注解不再在定义时立即求值,而是在需要读取时求值。使用 from __future__ import annotations 的代码仍保留字符串化注解行为,不能把两种情况混为一谈。

查看原始依据

PEP 649 提出通过 __annotate__ 函数延迟计算注解的总体机制;PEP 749 补充其实现细节,并引入 annotationlib。749 是补充,不是取代 649。

查看原始依据

get_annotations 提供 VALUE、FORWARDREF 和 STRING 三种公共读取格式;格式选择服务于运行时读取、保留未解析引用或文档展示等不同需求。

查看原始依据

annotationlib 官方安全章节明确警告:多数功能可执行任意代码。STRING 与 FORWARDREF 均不是无风险沙箱;不要把不可信字符串或对象交给注解内省 API。

查看原始依据

Python 3.14 官方新特性文档列出的发布日期为 2025-10-07;本档案记录的是文档核验,不是软件发布新闻。

查看原始依据

技术关系

查看档案相邻关系图谱 →

PEP 649定义机制时间未标注,不推断持续有效注解延迟求值
查看关系依据
PEP 749补充规范时间未标注,不推断持续有效PEP 649
查看关系依据
PEP 749定义机制时间未标注,不推断持续有效annotationlib
查看关系依据
Python 3.14提供时间未标注,不推断持续有效annotationlib
查看关系依据
annotationlib提供时间未标注,不推断持续有效annotationlib.get_annotations
查看关系依据
逐条阅读关系 →