当前位置: 首页 > news >正文

使用 from __future__ import annotations 语句来允许在类型注释中使用尚未定义的类名

我们来看一个例子,先定义类C,定义其中的函数时,在类型注释中使用了尚未定义的类名D:

>>> class C:  
...     def some_method(self, b: D) -> None:  
...         print(f"A is interacting with {b}")  
... 
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "<stdin>", line 2, in C
NameError: name 'D' is not defined
>>> from __future__ import annotations
>>> class C:  
...     def some_method(self, b: D) -> None:  
...         print(f"A is interacting with {b}")  
... 
>>> 

可以看到,第一次定义C的时候报错,说D没有定义。

然后输入 from __future__ import annotations之后,再定义C的时候,就没有报错了。

 为了解决类型注释未定义这个问题,Python 3.7及以上版本引入了一个特殊的from __future__ import annotations语句。这个语句的作用是改变Python解释器处理类型注解的方式,使得类型注解中的字符串在运行时被当作字符串处理,而不是在定义时立即求值。这允许你在类定义之前使用尚未定义的类名作为类型注解,因为此时这些类型注解仅仅是字符串,不会立即被解释器评估。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 用 Pygame 实现一个乒乓球游戏
  • 数字IC设计\FPGA 职位经典笔试面试整理--语法篇 Verilog System Verilog(部分)
  • lxml库
  • Axios基本语法和前后端交互
  • 【排序算法】选择排序、堆排序
  • Vue3:shallowRef与shallowReactive
  • JS手写Promise以及promise.all方法
  • 【算法】贪心+堆排序实现大根堆及标准库容器类的融合使用
  • 车载网络测试实操源码_使用CAPL脚本实现安全访问解锁,并模拟各种测试场景
  • C语言中易混淆概念的关键字
  • Qt/C++ 多线程同步机制详解及应用
  • redis 十大应用场景
  • 特种作业管理系统 —— 企业安全与效率的卓越保障
  • EfficientViT(2023CVPR):具有级联组注意力的内存高效视觉Transformer!
  • 8. 详细描述一条 SQL 语句在 MySQL 中的执行过程。
  • 03Go 类型总结
  • 5、React组件事件详解
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • iOS | NSProxy
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript设计模式之工厂模式
  • JavaWeb(学习笔记二)
  • JDK 6和JDK 7中的substring()方法
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • mysql 数据库四种事务隔离级别
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 盘点那些不知名却常用的 Git 操作
  • 浅谈web中前端模板引擎的使用
  • 一个项目push到多个远程Git仓库
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (007)XHTML文档之标题——h1~h6
  • (1)Hilt的基本概念和使用
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (C语言)fread与fwrite详解
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (十三)Flask之特殊装饰器详解
  • (四)Linux Shell编程——输入输出重定向
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .net core 控制台应用程序读取配置文件app.config
  • .net core使用ef 6
  • .NET Core引入性能分析引导优化
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • @antv/g6 业务场景:流程图
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [2]十道算法题【Java实现】
  • [20150629]简单的加密连接.txt
  • [AIGC] SpringBoot的自动配置解析