问题标签 [mypy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
571 浏览

python - MyPy / python 类型提示没有捕获可以返回多种类型的调用函数

attrgetter函数可以根据您给它的参数返回不同的类型。如果您通过一个项目传递一个可迭代对象,它将仅返回对象的给定字段;如果你将一个包含多个项目的迭代传递给它,它会返回一个对象的这些字段的元组。

但是,当使用类型提示 + MyPy 时,MyPy 不会发现这种差异(它不会引发错误):

和输出:

预期的结果将是这样的:

这是 MyPy 中的错误吗?

0 投票
1 回答
298 浏览

python - 应该如何使用python pep484类型检查返回self的上层方法

如何在一个类中定义一个函数,使得函数的返回类型是“当前类”——而不是基类。例如:

还是应该以某种方式施放它?如果返回类型是基类,那么它会报错。

我知道可以将它放到两行并添加临时变量来保存 Child(),但我认为单行看起来更好看。

我使用 mypy 进行类型检查。

0 投票
0 回答
43 浏览

python-3.x - 使用 mypy 仅对函数头进行类型检查

有没有办法让 python3 mypy 只检查类型提示的函数头,而不是函数内的变量?

0 投票
1 回答
790 浏览

python - 在 mypy 中,如何对继承自 NamedTuple 的类的方法进行类型检查?

根据 mypy 文档,如果一个类需要引用自身,它可以使用forward-reference

这似乎适用于普通类,但我无法让它与继承自 NamedTuple 的类一起使用。

更新:Guido van Rossum 本人已经在 Github 上回答了这个问题

我不是 100% 确定你想要完成什么,但根据你最初的例子,我猜你想为 B 类重新定义 + 以在 B 的实例上实现元素加法。 mypy 的原因没有默认情况下不支持这个被称为“Liskov 替换原则”(你可以谷歌它以获得解释)。

但是有一个解决方法:将 # type: ignore 放在产生错误的行(def add行)上。这听起来不太好,但是只要您从不将 B 实例传递给假定它是元组并尝试对其进行元组连接的代码,它就会做您想做的事情。

0 投票
1 回答
11244 浏览

python - 类型化python:在类定义中使用类自己的类型

以下代码无法按预期工作。显然,我不能在类定义中使用类自己的类型:

运行它的结果是:

此外,使用mypy返回检查代码:

如何更正此代码以使其对 Python 和 for 都有效mypy

0 投票
3 回答
2148 浏览

python - Python动态属性和mypy

我试图将一些函数屏蔽为属性(通过这里不重要的包装器)并将它们动态添加到对象中,但是,我需要代码完成和 mypy 才能工作。

我想出了如何动态添加属性(通过元类或简单地在构造函数中),但我遇到的问题是 mypy 没有选择它(IDE​​ 也没有)。

一种解决方法是定义具有相同名称/类型的属性,但我真的不喜欢这种方法(代码过多、静态属性集、重复)。

有没有更好的办法?

0 投票
1 回答
217 浏览

python - 返回类的类型声明,在 PyCharm 中给出错误

我正在尝试使用类型注释来提高我的代码清晰度。以下代码在 PyCharm Community Edition 2016.3.3 中出现错误:

PyCharm 在backend_cls(name)表达式中突出显示了该错误,并读取'Type' object is not callable。但是,代码运行良好,甚至mypy thisexample.py没有显示任何错误。

有没有办法让 PyC​​harm 增强它的冷静,明白一切都很好?还是我误解了某些东西并且 mypy 给出了误报?

这是在 Ubuntu 16.10 上使用 Python 3.6.0 和 mypy-0.501。

0 投票
1 回答
7930 浏览

python - MyPy:请求对象的类型是什么?

我正在尝试使用 Python 3 的类型提示语法以及 MyPy 静态类型检查器。我现在正在编写一个接受requests响应对象的函数,我想知道如何指示类型。

也就是说,在下面这段代码中,我可以用什么来代替???

0 投票
1 回答
1898 浏览

python - Mypy:以抽象类为值的地图类型注释

我正在开发一个具有各种存储后端的框架。这些后端都实现了一个抽象基类。后端类存储在从后端名称到实现该后端的类的映射中。

我们希望能够使用mypy执行类型检查,并注释如下:

运行 mypy-0.501 会出现此错误:

typingtest.py:32: error: Cannot instantiate abstract class 'A' with abstract attribute 'get_name'

我的问题:我们如何注释映射backends,以便 mypy 理解它只包含 的非抽象子类A

0 投票
0 回答
680 浏览

python - mypy 在 argparse 上出现“命名空间没有属性 XXX”错误

我正在尝试mypy用于类型注释。我写了一个简单的test.py

运行后mypy test.py,出现错误:

test.py:8:错误:“命名空间”没有属性“开发”

我的假设是 Namespace 类的属性是动态创建的,因此它们无法被mypy? 替换最后一行后,我可以解决此错误消息,setattr(args, 'dev', True)但这看起来不正确...有人可以帮我理解这个问题吗?我正在使用 Python 3.6.1。