问题标签 [python-typing]

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 回答
640 浏览

python - Python 类型提示,输出类型取决于输入类型

考虑以下函数

我如何暗示它返回

0 投票
4 回答
38002 浏览

python - 验证 python 数据类中的详细类型

Python 3.7 不久前发布了,我想测试一些花哨的新dataclass+ 打字功能。typing使用本机类型和模块中的类型,让提示正常工作很容易:

但我想尝试的另一件事是在运行时强制类型提示作为条件,即不应该dataclass存在类型不正确的 a 。它可以很好地实现__post_init__

这种validate函数适用于原生类型和自定义类,但不适用于typing模块指定的那些:

有没有更好的方法来验证一个无类型列表和一个类型的列表typing?最好是不包括检查任何list, dict,tuple或' 属性set中所有元素的类型。dataclass


几年后重新审视这个问题,我现在开始使用pydantic在我想要验证通常只为其定义数据类的类的情况下。不过,我会用当前接受的答案留下我的印记,因为它正确回答了原始问题并具有出色的教育价值。

0 投票
4 回答
24081 浏览

python - mypy,输入提示:Union[float, int] -> 是否有 Number 类型?

mypy 真的很方便,并且可以捕获很多错误,但是当我编写“科学”应用程序时,我经常会这样做:

number是浮点数或整数,取决于用户的输入。有没有官方的方法可以做到这一点?

0 投票
1 回答
243 浏览

python - 为什么 PyCharm 不能捕获 Optional[int] 和 Optional[str] 之间的类型错误?

我有点困惑为什么 PyCharm 不区分两种不同的 Optional 类型。

考虑以下代码。

请注意,funcs内部调用funci没有发现将 Optional[int] 传递给正在寻找Optional[str].

在此处输入图像描述

然而,如果我们去掉Optional[str]检查树皮。

在此处输入图像描述

这是预期的行为吗?如果是,我该怎么办?

我的直觉说类型检查应该足够聪明,可以区分Optional[str]vs Optional[int]。我已通读PEP-526PEP-484无济于事。

0 投票
3 回答
6231 浏览

python - Python 3.6:{method} 的签名与超类型 {Class} 不兼容

在尝试更新我的代码以符合 PEP-484(我使用的是mypy0.610)时,我遇到了以下报告:

$ mypy mymodule --strict-optional --ignore-missing-imports --disallow-untyped-calls --python-version 3.6

myfile.py:154: error: Signature of "deliver" incompatible with supertype "MyClass"

我的课:

我的文件.py:

我肯定在这里做错了什么,但我不太明白是什么:)

任何指针将不胜感激。

0 投票
2 回答
16233 浏览

python - 如何键入提示具有不同类型值的字典

将字典声明为文字时,有没有办法输入提示我期望特定键的值是什么?

然后,讨论一下:在 Python 中是否有关于字典输入的指导原则?我想知道在字典中混合类型是否被认为是不好的做法。


这是一个例子:

考虑在类中声明字典__init__

(免责声明:我意识到在示例中,某些.elements条目可能更适合作为类属性,但这是为了示例。)

当我键入以下内容时,

Pycharm 会'front' 为我建议。更好的是,当我这样做时

Pycharm 会建议.vertical

所以 Pycharm 会记住类中字典文字声明中的键__init__,以及它们的值的预期类型。或者更确切地说:它期望任何值具有文字声明中的任何一种类型 - 可能与我做了一个self.elements = {} # type: Union[type1, type2]会做的一样。无论哪种方式,我都觉得它非常有帮助。

如果你的函数有它们的输出类型提示,那么 Pycharm 也会考虑到这一点。

所以假设在上面的Rectangle例子中,我想指出这pins是一个Pin对象列表......如果pins是一个普通的类属性,它将是:

(前提是完成了必要的导入)

有没有办法在字典文字声明中给出相同的类型提示?

以下没有达到我正在寻找的东西:

Union[...]在文字声明的末尾添加类型提示?

为每一行添加类型提示:

这种事情有最佳实践吗?


更多背景:

我在 PyCharm 中使用 Python 并广泛使用打字,因为它可以帮助我预测和验证我的工作。当我创建新类时,有时我还会将一些不常用的属性放入字典中,以避免带有太多属性的对象混乱(这在调试模式下很有帮助)。

0 投票
2 回答
3179 浏览

python - 默认参数是否会覆盖 mypy 的类型提示?

以下代码mypy按预期被拒绝:

输出:

但是引入一个默认参数后None,就没有报错了:

如果我们从to更改,我希望mypy只允许None(作为参数和默认值),但似乎不需要这样做。为什么?valueintOptional[int]

0 投票
1 回答
2393 浏览

python - 如何注释类方法返回该类的实例

使用PEP 484,有没有办法注释类方法返回该类的实例?

例如

或者

0 投票
4 回答
161054 浏览

python - 我应该如何使用 Optional 类型提示?

我试图了解如何使用Optional类型提示。从PEP-484,我知道我可以Optional使用def test(a: int = None)asdef test(a: Union[int, None])def test(a: Optional[int]).

但是下面的例子呢?

如果Optional[type]似乎与 的意思相同Union[type, None],我为什么要使用Optional[]

0 投票
1 回答
394 浏览

python - 你如何检查一个 typeshed stub (.pyi) 文件是否与实现匹配?

您可以使用 mypystubgen.py或其他一些工具自动生成.pyi文件,但 stubgen 包含额外的建议来检查存根文件的准确性。

如果我自动生成存根然后对其进行修改以修复错误或使生成器没有处理的更严格,那么我如何检查它们是否同意实现?或者随着实施的变化并且我有手动生成的文件,我怎样才能确保它们保持同步?