0

0

Python注解在运行时作用_注解元数据解析

舞夢輝影

舞夢輝影

发布时间:2026-03-05 20:43:01

|

856人浏览过

|

来源于php中文网

原创

python注解默认仅作为元数据存于__annotations__属性中,需手动解析才能实现类型检查、文档生成等;其值在定义时求值(除非启用from __future__ import annotations),支持通过typing模块工具提取泛型信息,并广泛用于pydantic、fastapi等框架。

python注解在运行时作用_注解元数据解析

Python注解(Annotations)在运行时本身不自动执行任何操作,它们默认只是存储在函数或变量的 __annotations__ 属性中,属于元数据。真正发挥作用,需要开发者主动读取、解析并基于这些注解实现逻辑(如类型检查、参数验证、序列化、依赖注入等)。

注解如何被保存为运行时元数据

Python 在定义函数或变量时,会将注解以字典形式存入对象的 __annotations__ 属性:

  • 函数注解:键为参数名或 return,值为对应注解表达式求值后的结果(如 strOptional[int] 或自定义类)
  • 变量注解(Python 3.6+):模块级或类属性的注解也存入 __annotations__,但局部变量注解不保留
  • 注意:注解中的表达式会在定义时求值(除非使用字符串字面量加 from __future__ import annotations 延迟到运行时解析)

手动解析注解元数据的常见方式

直接访问 __annotations__ 是最基础的方式,但处理复杂类型(如泛型、联合类型)需借助标准库工具:

Spacely AI
Spacely AI

为您的房间提供AI室内设计解决方案,寻找无限的创意

下载
  • typing.get_origin(ann)typing.get_args(ann):分离 list[int] 中的容器类型与参数
  • typing.is_typeddict(ann)typing.is_literal_type(ann) 等判断类型类别
  • typing.get_type_hints(func, globalns=None, localns=None):安全地解析延迟求值的字符串注解,并支持前向引用解析

注解驱动的实际应用场景

注解的价值在于“约定即实现”,典型用法包括:

立即学习Python免费学习笔记(深入)”;

  • 运行时类型校验:如 pydantic 利用注解构建数据模型,在实例化时校验字段类型和约束
  • API 文档生成:FastAPI 读取函数注解和 Pydantic 模型,自动生成 OpenAPI JSON 和交互式文档
  • 依赖注入:某些框架(如 dependency-injector 或自研容器)根据参数注解自动提供对应服务实例
  • 序列化/反序列化dataclasses-json 根据字段注解决定如何转换嵌套结构或日期格式

注意事项与陷阱

依赖注解的逻辑必须明确设计解析时机与策略,否则容易出错:

  • 未启用 from __future__ import annotations 时,带前向引用的注解(如 "User")会因类未定义而报错
  • 注解不是类型强制——Python 解释器不会因注解 int 而阻止传入 str
  • 动态修改 __annotations__ 不影响已有逻辑,除非你显式重新解析它
  • 装饰器可能覆盖原始函数的 __annotations__,需用 @functools.wraps 保持元数据

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

452

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

330

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

28

2025.12.22

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

251

2026.02.06

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

718

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号