我想为模块(类“模块”)添加(Python3)类型提示。该typing
包不提供一个,并且types.ModuleType()
是返回模块对象为特定名称的构造器。
例:
import types
def foo(module: types.ModuleType):
pass
至少在PyCharm中导致“在types.pyi中找不到引用ModuleType”。
请注意,使用Python输入模块类型不会回答我的问题,因为它不能解释ModuleType既是构造函数又是类型,如下所示。
并且
types.ModuleType()
是构造函数。
没关系 types.ModuleType
就像str
和int
are一样,仍然是对类型的引用。不需要 通用
Module[typehint]
注释,因此types.ModuleType
您在这里使用的注释也是如此。
例如,官方的Python排版项目为以下项提供了类型提示注释sys.modules
:
from types import FrameType, ModuleType, TracebackType
# ...
modules: Dict[str, ModuleType]
不要被这里的名字弄糊涂了;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可能尚未正确处理此类情况。
问题内容: 类型提示是Python 3.5中讨论最多的功能之一。 的一个例子类型提示中提到的这篇文章和这一个,同时还提负责任地使用类型提示。有人可以解释更多有关它们的信息,何时使用以及何时不使用? 问题答案: 我建议阅读PEP 483和PEP 484和观看该演示由Guido的类型提示。 简而言之:类型提示实际上是单词的意思,你可以提示所使用的对象的类型。 由于Python 的动态特性,推断或检查所
问题内容: 在PEP 484中 ,包含模块的类型提示已添加到Python 3中。在Python 2中有什么方法可以做到这一点?我能想到的就是有一个装饰器来添加到检查类型的方法中,但这将在运行时失败,并且不会像提示所允许的那样被较早地捕获。 问题答案: 根据 Python 2.7的建议语法和 定义类型提示的PEP 484中的 跨代码 ,存在与Python 2.7兼容的另一种语法。但是,它不是强制性的
问题内容: 我正在使用以下方式动态加载Python模块 有人可以告诉我什么是模块类型的正确类型注释。该模块不包含一个模块,在其他地方也找不到答案。 问题答案: 您正在寻找。
问题内容: 该模块的Python帮助正在讨论冻结的模块。它是什么? http://docs.python.org/library/imp.html#imp.PY_FROZEN 问题答案: 该链接详细说明了Python Freeze实用工具:http : //wiki.python.org/moin/Freeze 简而言之,它创建了可移植版本的python脚本,该脚本带有自己的内置解释器(基本上像二
问题内容: 我刚刚在PEP 484中看到以下示例: 不出所料,这在Python 2中不起作用: 但是,它适用于Python 3: 这是出乎意料的。如下面的示例所示,它实际上还没有检查类型(运行,但不会引发异常): 似乎在之后必须是一个函数的名称,但是该函数似乎被忽略了: 之后的名称似乎也是如此。 这种类型的提示语法是否还使用了其他内容(例如Java Modeling Language使用注释)?何
问题内容: 我想向函数添加类型提示,该函数将接受带有方法的任何对象。例如,在 我不想限制为特定类型,例如或。只要它支持,它就是的适当参数。如何在没有不必要限制的情况下注释其类型? 编辑:显然,PyCharm可以在许多常见情况下得出适当的提示,但在我的实际用例中却不能。我无法发布代码,因为它是用于工作的,而且我找不到PyCharm失败的非专有最小示例。无论如何,原始问题不会引用PyCharm,它仍然