我有一个接受另一个Python函数的函数,这些函数用类型提示(__annotations__
)注释。我想在运行时使用这些提示进行一些类型检查。问题是输入模块中的类型类似乎不太容易使用(没有isinstance,没有issubclass)。所以,我想知道,有没有办法将它们转换为mypy类型的对象,然后使用mypy.subtypes.is_subtype
来比较类型提示中的类型?
答案 0 :(得分:0)
简短的回答是没有简单的方法。根据设计,typing
模块不会为运行时检查提供太多帮助。 PEP 484说
此PEP旨在为类型注释提供标准语法, 打开Python代码,以便更轻松地进行静态分析和重构, 潜在的运行时类型检查,以及(可能在某些上下文中)代码 生成利用类型信息。
在这些目标中,静态分析是最重要的。这包括 支持离线式检查器,如
mypy
,以及提供 标准符号,IDE可用于代码完成和 重构。非目标
虽然建议的
typing
模块将包含一些建筑物 用于运行时类型检查的块 - 特别是get_type_hints()
功能 - 必须开发第三方软件包 例如,实现特定的运行时类型检查功能 使用装饰器或元类。使用类型提示来提高性能 优化是留给读者的练习。