问题标签 [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.
python - Python 类型提示,输出类型取决于输入类型
考虑以下函数
我如何暗示它返回
python - 验证 python 数据类中的详细类型
Python 3.7 不久前发布了,我想测试一些花哨的新dataclass
+ 打字功能。typing
使用本机类型和模块中的类型,让提示正常工作很容易:
但我想尝试的另一件事是在运行时强制类型提示作为条件,即不应该dataclass
存在类型不正确的 a 。它可以很好地实现__post_init__
:
这种validate
函数适用于原生类型和自定义类,但不适用于typing
模块指定的那些:
有没有更好的方法来验证一个无类型列表和一个类型的列表typing
?最好是不包括检查任何list
, dict
,tuple
或' 属性set
中所有元素的类型。dataclass
几年后重新审视这个问题,我现在开始使用pydantic
在我想要验证通常只为其定义数据类的类的情况下。不过,我会用当前接受的答案留下我的印记,因为它正确回答了原始问题并具有出色的教育价值。
python - mypy,输入提示:Union[float, int] -> 是否有 Number 类型?
mypy 真的很方便,并且可以捕获很多错误,但是当我编写“科学”应用程序时,我经常会这样做:
number
是浮点数或整数,取决于用户的输入。有没有官方的方法可以做到这一点?
python - Python 3.6:{method} 的签名与超类型 {Class} 不兼容
在尝试更新我的代码以符合 PEP-484(我使用的是mypy
0.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:
我肯定在这里做错了什么,但我不太明白是什么:)
任何指针将不胜感激。
python - 如何键入提示具有不同类型值的字典
将字典声明为文字时,有没有办法输入提示我期望特定键的值是什么?
然后,讨论一下:在 Python 中是否有关于字典输入的指导原则?我想知道在字典中混合类型是否被认为是不好的做法。
这是一个例子:
考虑在类中声明字典__init__
:
(免责声明:我意识到在示例中,某些.elements
条目可能更适合作为类属性,但这是为了示例。)
当我键入以下内容时,
Pycharm 会'front'
为我建议。更好的是,当我这样做时
Pycharm 会建议.vertical
所以 Pycharm 会记住类中字典文字声明中的键__init__
,以及它们的值的预期类型。或者更确切地说:它期望任何值具有文字声明中的任何一种类型 - 可能与我做了一个self.elements = {} # type: Union[type1, type2]
会做的一样。无论哪种方式,我都觉得它非常有帮助。
如果你的函数有它们的输出类型提示,那么 Pycharm 也会考虑到这一点。
所以假设在上面的Rectangle
例子中,我想指出这pins
是一个Pin
对象列表......如果pins
是一个普通的类属性,它将是:
(前提是完成了必要的导入)
有没有办法在字典文字声明中给出相同的类型提示?
以下没有达到我正在寻找的东西:
Union[...]
在文字声明的末尾添加类型提示?
为每一行添加类型提示:
这种事情有最佳实践吗?
更多背景:
我在 PyCharm 中使用 Python 并广泛使用打字,因为它可以帮助我预测和验证我的工作。当我创建新类时,有时我还会将一些不常用的属性放入字典中,以避免带有太多属性的对象混乱(这在调试模式下很有帮助)。
python - 默认参数是否会覆盖 mypy 的类型提示?
以下代码mypy
按预期被拒绝:
输出:
但是引入一个默认参数后None
,就没有报错了:
如果我们从to更改,我希望mypy
只允许None
(作为参数和默认值),但似乎不需要这样做。为什么?value
int
Optional[int]
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[]
?
python - 你如何检查一个 typeshed stub (.pyi) 文件是否与实现匹配?
您可以使用 mypystubgen.py
或其他一些工具自动生成.pyi
文件,但 stubgen 包含额外的建议来检查存根文件的准确性。
如果我自动生成存根然后对其进行修改以修复错误或使生成器没有处理的更严格,那么我如何检查它们是否同意实现?或者随着实施的变化并且我有手动生成的文件,我怎样才能确保它们保持同步?