The*_*veO 13 python pycharm python-3.x typehints
我想为模块添加(Python3)类型提示(类'module').该typing包不提供一个,并且types.ModuleType()是一个返回特定名称的模块对象的构造函数.
例:
import types
def foo(module: types.ModuleType):
pass
Run Code Online (Sandbox Code Playgroud)
至少在PyCharm中导致"在types.pyi中找不到参考ModuleType".
Mar*_*ers 13
和types.ModuleType()是一个构造函数.
那没关系.types.ModuleType仍然是对类型的引用,就像是str和int.不需要通用 Module[typehint]注释,因此types.ModuleType您需要在此处使用.
例如,官方Python类型化项目提供了类型提示注释sys.modules:
from types import FrameType, ModuleType, TracebackType
# ...
modules: Dict[str, ModuleType]
Run Code Online (Sandbox Code Playgroud)
不要被这里的名字搞糊涂; types.ModuleType是对模块类型的引用.它不是一个单独的工厂功能或其他东西.CamelCase名称遵循该模块的约定,并且您使用该引用,因为类型对象不能作为内置函数使用.该types模块的值赋给type(sys)的名称.
如果PyCharm在查找types.ModuleType存根时遇到问题,那么这可能是PyCharm本身的问题(一个错误),或者当前捆绑的存根已经过时,或者您使用了不完整的类型的存根集.请参阅PyCharm文档,了解如何使用自定义存根提供新的集合.
如果这不起作用,可能是PyCharm中处理导出类型提示概念的错误.Typeshed当前在单独的模块中定义ModuleType类型提示,然后使用语法将其导入到types.pyi存根文件中from module import name as name.PEP 484声明导入的类型提示不是存根的一部分,除非您使用以下as语法:
除非导入使用
import ... as ...表单或等效from ... import ... as ...表单,否则导入存根中的模块和变量不会被视为从存根导出.
可能是PyCharm还没有正确处理这种情况.