并且types.ModuleType()
是一个构造函数。
那没关系。types.ModuleType
仍然是对类型的引用,就像str
and int
are 一样。不需要通用 Module[typehint]
注释,这types.ModuleType
正是您需要在这里使用的。
例如,官方Python typeshed 项目为 as提供了类型提示注解sys.modules
:
from types import FrameType, ModuleType, TracebackType
# ...
modules: Dict[str, ModuleType]
不要被这里的名字弄糊涂了;types.ModuleType
是对模块类型的引用。它不是一个单独的工厂功能或其他东西。CamelCase 名称遵循该模块的约定,您使用该引用是因为该类型对象不能作为内置对象使用。types
模块将的值分配给type(sys)
name。
如果 PyCharm 在查找types.ModuleType
存根时遇到问题,那么这可能是 PyCharm 本身的问题(一个错误),或者当前捆绑的存根已经过时,或者您使用了不完整的类型化存根集。请参阅 PyCharm 文档,了解如何使用自定义存根来提供新的集合。
如果这不起作用,则可能是 PyCharm 中处理导出类型提示概念的错误。Typeshed 当前在单独的模块中定义ModuleType
类型提示,然后使用语法将其导入types.pyi
存根文件。PEP 484声明导入的类型提示不是存根的一部分,除非您使用以下语法:from module import name as name
as
导入到存根中的模块和变量不被视为从存根中导出,除非导入使用import ... as ...
形式或等效from ... import ... as ...
形式。
PyCharm 可能还没有正确处理这种情况。