首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么mypy不能从@overload中推断函数注释?

mypy是一个静态类型检查工具,用于对Python代码进行类型检查。@overload是Python中的一个装饰器,用于定义函数的多个重载版本。然而,mypy在类型推断过程中无法从@overload中推断函数注释的原因是,@overload只是用于提供函数的多个重载版本,而不是实际的函数实现。

在Python中,函数的类型注释是可选的,而且在运行时并不会被强制执行。mypy通过静态分析代码来检查类型错误,但它无法理解@overload装饰器中的函数注释,因为它只是用于提供函数的多个重载版本,而不是实际的函数实现。

为了解决这个问题,可以在@overload装饰器之后,再定义一个实际的函数实现,并在该函数实现中添加类型注释。这样,mypy就能够正确地推断函数注释了。

总结起来,mypy不能从@overload中推断函数注释,是因为@overload只是用于提供函数的多个重载版本,而不是实际的函数实现。为了解决这个问题,可以在@overload装饰器之后,再定义一个实际的函数实现,并在该函数实现中添加类型注释。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

流畅的 Python 第二版(GPT 重译)(八)

这就是为什么我们需要S。如果我们重用T,那么start的类型将必须与Iterable[T]的元素类型相同。 ④ 实际函数实现的签名没有类型提示。 这是为了注释一行函数而写的很多行代码。...③ Mypy 将从 BookDict 'authors' 键的注释推断出 authors 的类型。 ④ typing.TYPE_CHECKING 仅在程序进行类型检查时为 True。...reveal_type 不是运行时 Python 函数,而是 Mypy 提供的调试工具。这就是为什么没有为它导入的原因。在 示例 15-7 查看其输出。 ⑥ demo 函数的最后三行是非法的。...② 经常需要注释开始为空的集合,否则 Mypy 无法推断元素的类型。⁵ ③ Mypy 理解 isinstance 检查,并在此块中将 value 视为 list。...其主要思想在“摘要”的这两句话描述: 本 PEP 建议更改函数注释和变量注释,使其不再在函数定义时评估。相反,它们以字符串形式保留在注释

23610

使用 Mypy 检查 30 万行 Python 代码,总结出 3 大痛点与 6 个技巧!

IntelliJ 也有自己的类型检查工具,支持在 PyCharm 实现类型推断。这些工具都声称自己“兼容 PEP-484”,因为它们使用 Python 本身定义的类型注解。...外部库缺乏类型注解最重要的痛点是,我们引入的大多数第三方 Python 库要么是无类型的,要么兼容 PEP-561。在实践,这意味着对这些外部库的引用会被解析为兼容,这会大大削弱类型的覆盖率。...所以,当我们招募团队成员时,Mypy 往往是他们必须学习的新东西。虽然类型注解语法的基础很简单,但我们经常听到这样的问题:“为什么 Mypy 会这样?”、“为什么 Mypy 在这里报错?”等等。...同样地,我也遇到过其它问题,使用 @typing.overload 或者@overload 、在类方法中使用@overload ,等等。...提示与技巧最后,我要介绍几个在使用 Mypy 时很有用的技巧。1. reveal_type在代码添加reveal_type ,可以让 Mypy 在对文件进行类型检查时,显示出变量的推断类型。

92520
  • python类型检测最终指南--Typing的使用

    这些示例确认允许更改事物的类型,并且Python在更改时正确地推断出类型。 静态类型 与动态类型相反的是静态类型。在运行程序的情况下执行静态类型检查。在大多数静态类型语言中,编译是在程序时完成的。...注解 Python 3.0引入了注释,最初没有任何特定用途。它们只是将任意表达式与函数参数和返回值相关联的一种方法。...对于这些情况,有一些特殊的Mypy表达式:reveal type()和reveal local()。您可以在运行Mypy之前将这些添加到您的代码Mypy将报告它所推断的类型。...,Mypy也正确地推断了内置数学的类型。...无论列表中有多少元素,注释只有一种类型:List [t]。 在许多情况下,你的函数会期望某种顺序,并不关心它是列表还是元组。

    4.9K10

    mypy 这个工具,让Python的类型提示变得非常实用

    mypy 是 Python 的静态类型检查器。写完带有类型提示的代码之后,先别运行行,用 mypy 命令来检查下你的代码,如果有错误,会提示你,这让 Python 的类型提示有了真正的作用。...后续开发的过程可以强制 mypy 检查无误后才能上线,借此提高代码的可读性和可维护性。 嗯,很实用,不是吗?下面分享一下如何使用 mypy。...如果希望检查某一行,可以在注释上加上"# type: ignore": y: int = "yyy" # type: ignore mypy 具有强大且易于使用的类型系统,具有很多优秀的特性,例如类型推断...disallow_untyped_defs 不允许定义没有类型注释或类型注释不完整的函数。...plugins 逗号分隔的 mypy 插件列表 最后的话 mypy 是自动化测试很重要的一部分,可以帮助我们检查 Python 语言的类型提示是否正确,减少代码的 bug,Python 开发的朋友们一定要用一用

    1.4K30

    爬虫(108)Python 3.8的超酷新功能(接近一万字,请耐心享用,而且建议收藏)

    在Python 3.8之前,此类仅位置参数仅适用于内置函数。没有简单的方法来指定参数在您自己的函数应该仅位置: >>> def incr(x): ......在向添加类型时,您已经使用了后者draw_line()。如果您仔细查看上面Mypy的输出,您会发现它在Union内部将较简单的表示法转换为表示法。 在某些情况下,函数的返回值的类型取决于输入参数。...签名将帮助您的类型检查器进行推断str或int根据的字面值to_roman。...传统上,字典使用注释Dict。问题在于,这仅允许键的一种类型和值的一种类型,通常导致诸如的注释Dict[str, Any]。...您也可以TypedDict纯粹用作注释: py38: PythonVersion = {"version": "3.8", "release_year": 2019} Mypy会告知您任何值的类型错误

    2.6K20

    流畅的 Python 第二版(GPT 重译)(四)

    对于每个 reveal_type() 伪函数调用,Mypy 将输出一条调试消息,显示参数的推断类型。 ⑤ 这一行将被 Mypy 标记为错误。...Mypy 在任何推断的类型后面加上 *:我没有在这个测试中注释 series 的类型。...⑥ Mypy 标记这行是因为display_wrong与update的display参数的类型提示兼容。...NoReturn 这是一种特殊类型,仅用于注释永远返回的函数的返回类型。通常,它们存在是为了引发异常。标准库中有数十个这样的函数。...在介绍一些类型的同时,我们通过 Mypy 进行实验,以查看类型检查错误,并借助 Mypy 的神奇reveal_type()函数推断类型。 最后一节介绍了如何注释位置参数和可变参数。

    39610

    Python 进阶指南(编程轻松进阶):十一、注释、文档字符串和类型提示

    原因是静态类型检查工具做类型推断,从变量的第一个赋值语句推断类型。例如,从行spam = 42,类型检查器可以推断垃圾邮件应该具有类型提示int。但是我还是建议设置一个类型提示。...在这种情况下,您可以搜索类似“赋值Mypy 兼容类型”的内容 每次修改代码时从命令行运行 Mypy 是相当低效的。为了更好地使用类型检查器,您需要配置您的 IDE 或文本编辑器在后台运行它。...如果所有这些都失败了,您总是可以从命令提示符或终端窗口运行 Mypy。 让 Mypy 忽略代码 出于某种原因,您可能会编写希望收到类型提示警告的代码。...指定Any类型提示和指定类型提示的区别在于Any明确声明变量或函数接受任何类型的值,而缺少类型提示表明变量或函数还没有类型提示。...即便如此,静态类型检查工具在源代码运行时使用类型提示来分析源代码。类型检查器,比如 Mypy,可以确保您不会将无效值赋给传递给函数的变量。通过防止一大类错误,这可以节省您的时间和精力。

    95430

    失控的 Python3 类型

    最大的变化之一是添加了类型注释,它允许开发人员通过一个函数返回 Dict[List[Set[FrozenSet[int]]], str](即,一个映射一组整数的不可变集合列表到字符串的字典)。...更有趣的是,当作者从文件剥离注释并要求 PyType 推断它们时,在 77% 的情况下它未能这样做,这意味着用户编写的注释正在捕获自动工具无法捕获的信息。...另一方面,MyPy 发现在检查的 2,678 个存储库,只有 15% 是类型正确的;这可能是因为 MyPy 非常保守并产生误报。...本文探讨了开发人员如何使用这些类型注释、类型检查和推理工具提供的类型系统语义以及这些工具的性能。我们评估公共 GitHub 存储库语料库的类型和工具。...MyPy 和 PyType 由于它们的静态性质而表现出误报,但也会在我们的语料库中标记出许多有用的错误。最后,MyPy 和 PyType 体现了两个不同的类型系统,在许多情况下标记不同的错误。

    36910

    3种适用于Python的疯狂秘密武器及原因解析

    Python的静态类型 输入Mypy。...def iter_primes() - Iterator[int]: # code here 在mypy示例,我们指定该函数返回一个整数迭代器。...结果 很难列出静态键入可以减轻您将来痛苦的所有方式,但是mypy文档具有很好的常见问题解答,但有更多的利弊。 如果您在稳定至关重要的生产代码库工作,请绝对尝试一下mypy。...秘密武器#3:使用Sonarlint更快地发现错误并编写更简单的函数 如今,每个编辑器都有某种类型的错误检查或内置的” lint”。 它通常在运行代码的情况下查看代码,并尝试猜测可能出了什么问题。...这些功能是我喜欢它的原因: 注释或未调用的代码 我对在整个代码库留下打印语句,注释掉的代码以及未使用的函数感到内gui。 这将警告我,使其难以忘记,并告诉我它在哪里,易于查找。

    91030

    深入理解 Python 的类型提示

    这让我们知道了程序不同类型的数据各占了多少内存空间。 我们为什么要在意这些呢?因为一些类型比另一些类型更高效,更适合不同的任务。...Steve Klabnik 写到: 在静态系统,编译器检查源代码并将“类型”标签分配给代码的参数,然后使用它们来推断程序行为的信息。...大体上,使用类型提示有很多好处: 如果你使用复杂的数据结构,或者有很多输入的函数,在很久之后再次阅读代码时将会更容易。如果只是向我们的示例带有单个参数的简单函数,则会显得很简单。...但后来 Python 逐渐使用更统一的方法来处理类型提示,开始包括函数注释: Function annotations, both for parameters and return values, are...如果尝试在兼容的类型上运行方法,将只会出现问题。例如尝试对字典切片或从字符串中弹出值。 从实现细节来看: 虽然这些注释在运行时通过 annotations 属性可用,但在运行时不会进行类型检查。

    1.2K30

    SqlAlchemy 2.0 中文文档(三十一)

    对在声明式“内联”样式定义的 ORM 映射属性进行类型推断,例如上面示例 User 类的 id 和 name 属性。...原始表达式移动到一个函数调用,这样可以仍然进行类型检查而不与表达式的左侧冲突。对于 Mypy 来说,左侧的类型注释足以理解属性的行为。 添加了User....对于这些函数函数的返回类型应使用Mapped[]构造或指示函数返回的确切对象类型进行注释。...对于在声明式“内联”样式定义的 ORM 映射属性的类型推断,例如上面示例 User 类的 id 和 name 属性。...原始表达式移到一个函数调用,这将允许它仍然被类型检查而不与表达式的左侧发生冲突。对于 Mypy 来说,左侧的类型注释足以理解属性的行为。 为 User.

    39120

    TypeScript 官方手册翻译计划【四】:函数

    在这个例子,没有什么有趣的事情值得注意。我们允许 TypeScript 推断 longest 函数返回值的类型。返回值的类型推断也适用于泛型函数。...人们通常会写出下面的代码,并且不理解为什么会抛出错误: function fn(x: string): void; function fn() { // ... } // 这里本应该可以传入任何参数...再次重申,用于编写函数体的签名必须不能从外部被“看到”。 实现签名不能从外部被“看到”。当编写重载函数的时候,在函数的代码实现部分的上面,必须始终有两个或者两个以上的签名。...在可能的情况下,请始终使用联合类型参数,而不是重载 在函数声明 this TypeScript 可以通过代码流分析推断函数的 this 指向。...返回值类型为 void 的上下文类型并不会强迫函数返回任何东西。

    2.6K20

    神级操作!优化​Python开发环境的几个技巧

    对于很多人而言,Python提供的大量免费函数库、高可读性的程序和新引入的类型注释让很多爱不释手。...大家可能会问:为什么不只用pip? 因为只用pip可能会在全局环境安装poetry及其依赖项,这可能是你不需要也不想要的。...类型纠正(Type-Correctness) 自Python3.5开始,类型注释开始成为标准库的一部分通过类型注释,代码更好理解,更易维护,不易出错。 为什么会不易出错呢?...因为可以静态地检查变量和函数的类型是否符合预期。当然,必须是自动完成的。 下面介绍mypyMypy是一种静态python代码检查器,作用是在错误发生之前找到他们。...Black工具的钩子函数不仅会检查格式,还会相应地为文件添加格式。 每次添加新的钩子函数时,建议一开始在所有文件手动运行pre-commit,因为它只能作用于上次提交之后更改过的文件。

    1.2K10

    自动化让你远离烦恼,几个小技巧轻松优化​Python开发环境

    对于我而言,Python提供的大量免费函数库、高可读性的程序和新引入的类型注释让我沉迷其中无法自拔。...读者可能会问:为什么不只用pip?因为只用pip可能会在全局环境安装poetry及其依赖项,这可能是你不需要也不想要的。必要指令如下。...类型纠正(Type-Correctness) 自Python3.5开始(如果我记错了请纠正),类型注释开始成为标准库的一部分通过类型注释,代码更好理解,更易维护,不易出错。为什么会不易出错呢?...因为可以静态地检查变量和函数的类型是否符合预期。当然,必须是自动完成的。 下面介绍mypyMypy是一种静态python代码检查器,作用是在错误发生之前找到他们。...Black工具的钩子函数不仅会检查格式,还会相应地为文件添加格式。每次添加新的钩子函数时,建议一开始在所有文件手动运行pre-commit,因为它只能作用于上次提交之后更改过的文件。

    1.2K30
    领券