Python 解构类型提示

Python 解构类型提示,python,casting,type-hinting,Python,Casting,Type Hinting,我正在寻找一种使用Python的类型提示来强制转换非平凡类型的简洁方法 例如,从简单类型转换 a = '5' b: int = None __annotations__['b'](a) # <int 5> 必须有一种方法来解析这些注释,才能使类型注释对IDE之类的东西有用。澄清后编辑: 根据您的评论,我认为您在询问应用程序(例如IDE)如何解析类型注释,以检查某些代码是否与它们兼容 答案是:这是符合PEP 484的静态类型检查器(如mypy)的主要工作。Mypy有大约50k行代

我正在寻找一种使用Python的类型提示来强制转换非平凡类型的简洁方法

例如,从简单类型转换

a = '5'
b: int = None

__annotations__['b'](a)  # <int 5>

必须有一种方法来解析这些注释,才能使类型注释对IDE之类的东西有用。

澄清后编辑:

根据您的评论,我认为您在询问应用程序(例如IDE)如何解析类型注释,以检查某些代码是否与它们兼容

答案是:这是符合PEP 484的静态类型检查器(如mypy)的主要工作。Mypy有大约50k行代码,所以它并不简单。理论上,IDE可以使用mypy,从中获取所有错误消息,然后将相应的代码标记为不正确。然而,在实践中,PyCharm和WingIDE从头实现了大致相同的功能

如果您需要为自己的项目解析和验证类型提示,只需使用

如果只需要解析类型注释,而不实际验证它们是否正确,则可以使用

原始答复:

类型提示意义上的强制转换旨在告诉类型检查器,由于类型检查器对程序的理解有限,该变量的类型与它所认为的不同。它没有说明如何将事物从一种类型转换为另一种类型,在绝大多数情况下,转换要么模棱两可,要么不可能。例如,您希望这些“强制转换”的结果是什么:


我试图猜你所说的“解析IDE的类型注释”是什么意思,但猜不到。也许你可以澄清更多?IDE(如PyCharm和WingIDE)已经很好地解析了类型注释,并使用它们,例如,在键入时自动完成标识符。

据我所知,该功能尚未编写,当然也不在标准库中。这可能是可行的,但你必须实现它。到目前为止,键入主要是为了验证,而不是转换-例如,如果某个东西被键入为
序列
它应该是什么具体类型?工会类型呢?是的,很抱歉用词。我的意思是IDE能够看到
Union[str,float]
(比如说作为一个函数参数),并且知道在传递类似
a={}
的消息时何时抛出警告。为此,IDE必须将类型注释解构为其组成部分(Union、str、float)。这有意义吗。我明白你的观点,不去做,去做可靠的事情,那没关系。谢谢你挖掘这个问题。我的链接似乎已改为
b: Optional[int] = None

__annotations__['b']  # typing.Union[int, NoneType]
from typing import Dict
a = 5
b: Dict[int, int]
__annotations__['b'](a)  # ??? (impossible)
c: Union[str, float]
__annotations__['c'](a)  # ??? (ambiguous)