我想为模块(类“模块”)添加(Python3)类型提示。 typing
包不提供任何包,types.ModuleType()
是一个构造函数,它返回特定名称的模块对象。
示例:
import types
def foo(module: types.ModuleType):
pass
至少在PyCharm中导致“在types.pyi中找不到引用ModuleType”。
答案 0 :(得分:7)
和类型。ModuleType()是构造函数。
没关系。 types.ModuleType
仍然是对类型的引用,就像str
和int
一样。不需要泛型 Module[typehint]
批注,因此types.ModuleType
正是您在这里需要使用的。
例如,官方Python typeshed project提供的type hint annotation for sys.modules
如下:
from types import FrameType, ModuleType, TracebackType
# ...
modules: Dict[str, ModuleType]
不要被这里的名字弄糊涂; types.ModuleType
是对模块类型的引用。它不是独立的工厂功能或其他功能。 CamelCase名称遵循该模块的约定,您可以使用该引用,因为类型对象不能作为内置对象使用。 types
模块assigns the value of type(sys)
to the name。
如果PyCharm在查找types.ModuleType
存根时遇到问题,则可能是PyCharm本身存在问题(一个错误),或者当前捆绑的存根已过时,或者您使用了不完整的格式化的存根集。请参阅how to use custom stubs上的PyCharm文档以提供新的设置。
如果这不起作用,则可能是PyCharm处理 exporting 类型提示概念的错误。当前键入defines the ModuleType
type hints in a separate module,然后使用from module import name as name
语法imported into the types.pyi
stubfile键入。 PEP 484指出,除非您使用as
语法,否则导入的类型提示不属于存根 :
除非导入使用
import ... as ...
形式或等效的from ... import ... as ...
形式,否则不认为导入到存根中的模块和变量是从存根中导出的。
PyCharm可能尚未正确处理此类情况。