问题标签 [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.
python - mypy AnyStr 在简单示例的分配中给出了不兼容的类型
给定以下课程:
我得到以下输出:
这个分配操作怎么会给出不兼容的类型?
python - python 3.6.2中的打字.NamedTuple,abc.NamedTuple mixins?
我是 python 新手(3.6.2 是我正在使用的版本)。
我目前正在将 DSL 实现从 Scala 移植(尝试移植)到 python,用于某些强制使用 python 的项目。
因此,我正在寻找一种方法来有效地编写不可变的类层次结构以支持使用 mypy 进行类型检查的方式来表示 ADT。
我第一次遇到macropy,它在python中复制scala案例类和模式匹配,但只兼容python 2.7.x(无论如何都不能与mypy一起使用)。
我做了一些更多的研究,然后输入了.NamedTuple 和 abc.ABC。所以现在我正试图找到一种方法来结合 typing.NamedTuple 和 abc.ABC 的好处,以便能够将 mixins 添加到 namedtuples。
我希望能够编写这种代码:
上面的代码使用 mypy 运行类型检查,但在 C2.m 调用中失败(方法调用只返回 None)。
所以我进一步搜索并找到了这个 collections.namedtuple + Mix-In 的配方:abc.namedtuple
我试图将配方从 collections.namedtuple 调整为 typing.NamedTuple,但无法理解配方中涉及的相当复杂和脆弱的 python 机器。有什么明显的方法可以使这项工作吗?
python - mypy 找不到模块“保管箱”
我有一个小的代码库来备份 Dropbox Business 文件,并且正在尝试使用mypy来帮助我使用相当 unpythonic 的Dropbox Python SDK。
我已经安装了 mypy,它正在工作。
但是,mypy 会针对以下行发出警告:
警告是“找不到名为‘dropbox’的模块”。
似乎 Dropbox 的 SDK 生成器,称为 Stone,应该生成兼容的存根文件(在这种情况下将被称为dropbox.pyi
)。
但是没有dropbox.pyi
in site-packages/dropbox
,mypy 会在其中寻找它。
如何对dropbox
包进行类型检查?
提前致谢。
版本:
- Python 3.6 64 位 (Anaconda)
- 操作系统:Windows 10 专业版 64 位
- 我的 0.521
- 保管箱 SDK 8.0.0
python - mypy:如何定义泛型子类
我有一个queue.Queue
像这样的子类:
我正在尝试使用mypy进行静态类型检查。在这种情况下,SetQueue 应该采用通用对象 T。这是我迄今为止的尝试:
mypy 在类定义行上抛出一个警告,说“缺少泛型类型的类型参数”。
我认为我需要一个Generic[T]
地方,但我所做的每一次尝试都会引发语法错误。文档中的所有示例都显示了从任何其他对象继承Generic[T]
但不从任何其他对象继承。
有谁知道如何定义 SetQueue 的泛型类型?
python - 本地修补缺少的 Python 类型注释?
Python 现在支持类型提示,所以...耶!这似乎是避免一些更晦涩的运行时错误的好方法。
可悲的是,第三方库支持仍然是一个问题。虽然 mypy 也使用了 typeshed 项目部分解决了这个问题,但在尝试移植我的一些代码以使用类型提示时,由于缺少存根,我遇到了问题。
例如
会很好地工作,但 mypy 会产生虚假的错误消息
因为存根当前不完整。
对于一个更大的项目,从 typeshed 下载存根,添加缺失的条目,甚至提交相应的拉取请求是一件轻而易举的事。
但是有什么方法可以在快速而肮脏的场景中修补缺失的信息吗?
糟糕的解决方法
我能想到的最好的是
这可以消除错误,但也会禁用items
之后使用变量的类型检查。例如items[0] + 1
,不会再引起警告。
为了保留类型检查,可以使用
但这似乎很老套;它还必须在.xpath
使用该方法的任何地方重复。
从 2017-09-12 更新:或者可以使用语法
python - Python类型注释:将元组中的项目标记为可选
我有一个返回 2 元组但可选的 3 元组的函数。我如何用类型注释来描述这个?
例如:
我可以像下面这样使用 Union,但它看起来很乱。
python - Mypy:寻找平均函数的完美签名
我正在尝试为以下函数(Python 3.6,mypy 0.521)提出完美的函数签名:
这段代码的好处在于,它可以与 , , 的可迭代对象一起工作,并产生正确的结果,int
但也可以为. 尝试添加签名时会出现问题。我尝试了以下方法:float
complex
datetime.timedelta
但是现在,调用者需要转换结果。
这失败了,因为T
不支持加法或除法。
失败是因为int / int
是float
; using//
几乎对其他所有内容都给出了错误的结果。也很糟糕,因为代码应该适用于其他类型,只要支持加法和除法。
这几乎是完美的,但同样,如果有人后来决定向它扔四元数,mypy 会抱怨。
...然后我也尝试了一些东西,abc
但这typing.overload
让我无处可去。
最优雅的解决方案是mypy --strict
什么?
python - 从与 TypeVar 关联的具体类型中获取内部类型
我正在使用pythonmypy
中的typing
模块。想象一下我有一个泛型类型:
但是,我想在与 TypeVar 关联的具体类型中获取另一种类型,如下例所示:
我收到一条错误消息,说TypeVar
没有成员Iterator
。有没有另一种方法来重新制定这个,所以我可以将一种类型与另一种类型联系起来?
谢谢你。
python - mypy:“__getitem__”的签名与超类型“序列”不兼容
我有一个继承自MutableSequence
这样的类:
mypy抱怨说Signature of "__getitem__" incompatible with supertype "Sequence"
。
在Sequence
中,该方法定义为:
那么,问题出在哪里,为什么mypy对我的实现不满意?