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

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(使用前将#替换为@)

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

  • 我应该使用 Python 双端队列还是列表作为堆栈? [复制]

    这个问题在这里已经有答案了 我想要一个可以用作堆栈的 Python 对象 使用双端队列还是列表更好 元素数量较少还是数量较多有什么区别 您的情况可能会根据您的应用程序和具体用例而有所不同 但在一般情况下 列表非常适合堆栈 append is
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • MongoEngine 查询具有以列表中指定的前缀开头的属性的对象的列表

    我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素 现在我有一段这样的代码 query mymodel terms term in query terms 并且这会匹配在列表 term 上有一个项目的对象 该列表中的
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 为什么一旦我离开内置的运行服务器,Django 就无法找到我的管理媒体文件?

    当我使用内置的简单服务器时 一切正常 管理界面很漂亮 python manage py runserver 但是 当我尝试使用 wsgi 服务器为我的应用程序提供服务时django core handlers wsgi WSGIHandle
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • 未知错误:Chrome 无法启动:异常退出

    当我使用 chromedriver 对 Selenium 运行测试时 出现此错误 selenium common exceptions WebDriverException Message unknown error Chrome fail
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 如何使用 PrimaryKeyRelatedField 更新多对多关系上的类别

    Django Rest 框架有一个主键相关字段 http www django rest framework org api guide relations primarykeyrelatedfield其中列出了我的 IDmany to m
  • 将索引与值交换的最快方法

    考虑pd Series s s pd Series list abcdefghij list ABCDEFGHIJ s A a B b C c D d E e F f G g H h I i J j dtype object 交换索引和值并
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是
  • python 对浮点数进行不正确的舍入

    gt gt gt a 0 3135 gt gt gt print 3f a 0 314 gt gt gt a 0 3125 gt gt gt print 3f a 0 312 gt gt gt 我期待 0 313 而不是 0 312 有没有
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 如何在 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