编写静态类型 python 时获取查找对象类型的好方法是什么?
What is a good way to get find object types when writing statically typed python?
当尝试编写静态类型 python 时,查找更复杂 python 对象类型的好方法是什么?
例如,我认为 x 的类型注释在这里是正确的:
from itertools import combinations
from typing import Union, Iterator
x: Union[Iterator[tuple[int]]] = combinations([1,2,3], 2)
不过,我很想通过像这样简单的操作来弄清楚类型:
print(type(itertools.combinations))
<class 'itertools.combinations'>
但这给出了错误的结果,即 <class 'itertools.combinations'>
不是 Union[Iterator[tuple[int]]]
,我认为这是 x
.
的正确类型注释
此外,PyCharm 告诉我 Union[Iterator[tuple[int]]]
是正确的类型,但是当我单击文档时 link 它只给我 this 这是标准 python itertools 的文档,我在那里看不到任何类型注释。所以想知道是否有办法访问 PyCharm 在这里所做的事情...
"PyCharm 告诉我 Union[Iterator[tuple[int]]]
是正确的类型" 我认为 PyCharm 告诉你没有冲突,但这并不意味着它是实际正确的类型,这解释了为什么它允许 Union
在那里。除非你想暗示 Union[X, None]
,但你会想要 Optional
。
请注意,查找答案和检查答案是不同的 - 您正在寻找可以找到答案的东西,PyCharm 正在检查您的答案。这就像数学,如果你有答案,很容易填写一个公式并检查它是否有效,但仅给出公式,需要复杂的工作来找出答案 - 并且可能有多个正确答案。
这也更广泛地适用于 print(type(itertools.combinations))
。
在你的情况下,期望的正确return类型是Iterator[tuple[int]]
,但如果你调用combinations(['a','b','c'], 2)
,它将是Iterator[tuple[str]]
- 所以 return 类型需要用你调用函数的类型进行参数化,使事情变得更加复杂。
简而言之,没有您正在寻找的东西,尽管有一些第三方工具可能会让您接近,例如用户@MegaIng 建议的 mypy
中的 reveal_type
。 (我没有直接使用它的经验,但它看起来值得检查一些用例)
当尝试编写静态类型 python 时,查找更复杂 python 对象类型的好方法是什么?
例如,我认为 x 的类型注释在这里是正确的:
from itertools import combinations
from typing import Union, Iterator
x: Union[Iterator[tuple[int]]] = combinations([1,2,3], 2)
不过,我很想通过像这样简单的操作来弄清楚类型:
print(type(itertools.combinations))
<class 'itertools.combinations'>
但这给出了错误的结果,即 <class 'itertools.combinations'>
不是 Union[Iterator[tuple[int]]]
,我认为这是 x
.
此外,PyCharm 告诉我 Union[Iterator[tuple[int]]]
是正确的类型,但是当我单击文档时 link 它只给我 this 这是标准 python itertools 的文档,我在那里看不到任何类型注释。所以想知道是否有办法访问 PyCharm 在这里所做的事情...
"PyCharm 告诉我 Union[Iterator[tuple[int]]]
是正确的类型" 我认为 PyCharm 告诉你没有冲突,但这并不意味着它是实际正确的类型,这解释了为什么它允许 Union
在那里。除非你想暗示 Union[X, None]
,但你会想要 Optional
。
请注意,查找答案和检查答案是不同的 - 您正在寻找可以找到答案的东西,PyCharm 正在检查您的答案。这就像数学,如果你有答案,很容易填写一个公式并检查它是否有效,但仅给出公式,需要复杂的工作来找出答案 - 并且可能有多个正确答案。
这也更广泛地适用于 print(type(itertools.combinations))
。
在你的情况下,期望的正确return类型是Iterator[tuple[int]]
,但如果你调用combinations(['a','b','c'], 2)
,它将是Iterator[tuple[str]]
- 所以 return 类型需要用你调用函数的类型进行参数化,使事情变得更加复杂。
简而言之,没有您正在寻找的东西,尽管有一些第三方工具可能会让您接近,例如用户@MegaIng 建议的 mypy
中的 reveal_type
。 (我没有直接使用它的经验,但它看起来值得检查一些用例)