类型注释中未定义名称[重复]

2024-01-19

我目前正在创建一个 python 线性代数模块,以供娱乐和练习该语言。我最近尝试向模块添加类型注释,如下所示:

class Vector:
     # Various irrelevant implementation details
     def __add__(self, other: Vector) -> Vector:
        # More implementation details....

但是,当我尝试导入它时,它会输出一个NameError: Name 'Vector' is not defined。我承认这个问题已经以某种形式得到了回答,here https://stackoverflow.com/questions/27461035/function-annotation-in-python-3-get-name-not-defined-error,但它似乎并没有完全为我的情况提供答案。

我想知道的是:

  • 我已经在这个文件中按字面定义了该类。为什么说名称未定义?
  • 我如何定义Vector以这样的方式它可以用于注释(作为type)?

您有一份前瞻性声明;创建函数(作为方法绑定)before班级是,所以名字Vector还不存在。只有当所有类体都执行完毕后,Python 才能创建class对象并绑定名称Vector to it.

只需使用带有名称的字符串即可:

class Vector:
     # Various irrelevant implementation details
     def __add__(self, other: 'Vector') -> 'Vector':
        # More implementation details....

这不会影响您的 IDE 如何查看声明;加载整个模块后就会查找字符串,并将其解析为当前上下文中的有效 Python 表达式。自从上课以来Vector一旦整个模块加载就存在,字符串'Vector'可以正确转换为类对象。

另请参阅前向引用规范 http://legacy.python.org/dev/peps/pep-0484/#forward-references:

当类型提示包含尚未定义的名称时,该定义可能会表示为字符串文字,以便稍后解析。

[...]

字符串文字应包含有效的 Python 表达式 [...],并且一旦模块完全加载,它的计算结果应该不会出现错误。

从 Python 3.7 开始,您可以通过添加from __future__ import annotations指令位于模块顶部。最初计划将此设置为 Python 3.10 及更高版本中的默认设置,但此决定现已无限期推迟。看PEP 563——推迟对注释的评估 https://www.python.org/dev/peps/pep-0563/了解详情。注意outside对于注释,您可能仍然需要使用前向引用语法(字符串文字),例如在类型别名中(就 Python 而言,这是常规变量赋值)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型注释中未定义名称[重复] 的相关文章

随机推荐

  • 如何在 JavaScript 中将值从一个 html 页面传递到另一个页面?

    我知道这个问题问了很多次 但我的问题有所不同 我有 3 个 html 页面 例如apply html personal info html resume info html 在 apply html 页面中 我使用一个 LinkedIn 按
  • 从 android init.rc 执行静态程序

    我想在以下位置启动一个自定义程序init过程 我静态编译了这个程序 它可以在我启动的 android stock ROM 中正常运行 来自安卓init rc我读到的文档exec命令是我需要的 顺便说一句 我能看到的都是dmesg我的程序退出
  • 如何在Azure功能上安装apt-get包

    在 Linux 消费计划上运行 python Azure 函数 我已经能够使用 VS Code 成功将该函数部署到 Azure requirements txt 中的所有包都可以顺利安装 但现在我需要安装tesseract 它只能通过apt
  • 是否可以对特定于浏览器的 CSS 使用 mixin

    我正在寻找一种使用 mixin 进行特定于浏览器的 CSS hack 的解决方案 我正在使用 JavaScript 在 HTML 类中添加浏览器标签 喜欢 ie ie7 ie8 ie9 我想使用 mixin 像 box test margi
  • 创建自定义 DatePicker 对话框

    要求 当用户单击 TextView 时 应打开一个日期选择器 选择的默认日期应该是 TextView 中的日期 如果日期是过去的日期 则应禁用 DatePicker 对话框的 设置 按钮 如果可点击的 TextView 为空 则 DateP
  • 数据库驱动类动态加载

    我想用 java 开发一个与数据库无关的应用程序 我选择hibernate作为ORM jdbc的问题在于 它只是一个接口 我们需要在类路径中包含db的驱动程序类 由于数据库应该是可配置的 我必须动态加载数据库的驱动程序类 用户应该将驱动程序
  • graphviz - 如何在矩形布局中以循环方式排列节点?

    预脚本 就在我完成这些示例时 我看到了 往返 流程主题 https stackoverflow com questions 18877045 graphviz how to create a roundtrip flow 看起来不错 既然我
  • 图片上方半透明div

    我有一个角色的 PNG 图像 我想要类似的东西 http www swfcabin com open 1364482220 http www swfcabin com open 1364482220 如果有人点击角色身体的一部分 它将被 选
  • Django REST Framework - 如何返回 404 错误而不是 403

    仅当用户经过身份验证并且满足某些其他条件时 我的 API 才允许访问 任何请求 某些对象 class SomethingViewSet viewsets ModelViewSet queryset Something objects fil
  • 我们有专门针对 Spring 5.x 的 XSD 吗?

    谁能告诉我 Spring 5 版本的 XSD 是否可用 有没有类似的东西spring beans 5 1 xsd spring context 5 1 xsd spring mvc 5 1 xsd or spring beans 5 0 x
  • C++ Linux 与另一个程序交互 stdin / stdout

    我在 Linux 中有一个可以与 stdin stdout 交互的可执行文件 我正在尝试用 C 编写一个程序 它可以交互地调用该程序 向其标准输入发送命令 并捕获其标准输出 我真的很困惑 我不想分叉我的程序 是吗 我确实希望我的程序能够启动
  • 异步连接管道

    我想将相同的信息写入两个管道 但我不想等待第一个管道读取 这是一个例子 mkfifo one mkfifo two echo hi tee one two cat one cat two cat one直到开始阅读cat two正在运行 有
  • 我如何请求浏览器始终更新(也称为从不缓存)某些页面元素,例如 CSS 表?

    我在开发页面时注意到一个始终困扰我的问题 虽然 Firefox 我常用的 开发 浏览器 总是在服务器上更改 CSS 和图像时更新它们 但 Internet Explorer 并不总是这样做 通常 我需要刷新 IE 中的页面 然后它才会向服务
  • 使用Selenium + Scrapy

    我正在尝试将 scrapy 与 selenium 结合使用 以便能够与 javascript 交互 并且仍然拥有 scrapy 提供的强大的抓取框架 我写了一个访问的脚本http www iens nl http www iens nl 在
  • EntityFramework.6.1.2-beta1\tools\init.ps1 受到限制,无法运行enable-migrations 命令

    Visual Studio 2013 C ASP NET MVC 问题 EntityFramework 6 1 2 beta1 tools init ps1 无法加载 因为其执行被软件限制策略阻止 有关详细信息 请联系您的系统管理员 当我尝
  • Android Studio 收到“必须实现 OnFragmentInteractionListener”

    我收到一条消息 上面写着 必须实现 OnFragmentInteractionListener 而且我已经有了它 我已经查看了这里提出的每个问题 但没有人帮助我 有人可以帮我吗 ERROR FATAL EXCEPTION main Proc
  • 如何找出 next() 何时到达末尾,然后转到第一项

    我使用 next 函数显示一系列元素 不过 一旦到达终点 我想转到第一个元素 有任何想法吗 这是代码 Prev Next Click nextSingle click function Get the height of the next
  • 切换 Git 分支时处理 DataBinding 错误

    在数据绑定布局已更改 删除的 Git 分支之间切换时 我遇到了很多数据绑定问题 当切换 Git 分支时删除文件时 我经常会遇到这样的构建错误
  • 在 Python 中使用 Mock 来实现嵌套对象(DynamoDB 和表)

    我想使用来自 DynamoDb 的不同输入来测试函数的行为 有两种主要行为 当在表中找到搜索关键字时和当未在表中找到搜索关键字时 这是该函数的最小代码 import boto3 from boto3 dynamodb conditions
  • 类型注释中未定义名称[重复]

    这个问题在这里已经有答案了 我目前正在创建一个 python 线性代数模块 以供娱乐和练习该语言 我最近尝试向模块添加类型注释 如下所示 class Vector Various irrelevant implementation deta