Python 中没有循环导入的类型提示
在尝试将一个大类拆分为两个较小的类时,您会遇到循环问题进口。 “main”类导入 mixin 类,并且 mixin 类在其类型提示中引用“main”类。这会导致导入循环,导致类型提示无法正常工作。
要解决此问题,您可以考虑以下方法:
<code class="python"># main.py from __future__ import annotations from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from mixin import MyMixin class Main(object): def func1(self, xxx: Any): ...</code>
<code class="python"># mixin.py from __future__ import annotations from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from main import Main class MyMixin(object): def func2(self: Main, xxx: Any): ...</code>
在此示例中,Python 的 TYPE_CHECKING常量用于有条件地导入“主”类。运行代码时,由于常量为 False,因此跳过 import 语句。然而,像 mypy 这样的类型检查工具会解释 if TYPE_CHECKING 块中的代码并识别 func2 的类型注释。
另一种方法涉及使用前向引用:
<code class="python"># mixin.py from __future__ import annotations from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from main import Main class MyMixin(object): def func2(self, xxx: 'Main'): ...</code>
这里, func2 的类型注释是一个字符串,表示稍后将导入的类的名称。这两种方法都需要使用 Python 3.7 或更高版本才能有效地使用类型提示。
请记住,使用 mixins 和类型提示可能需要在代码中进行额外的结构化。例如,mypy 建议创建一个抽象基类 (ABC),您的“主”类和 mixin 类都继承自该类。这可以提高类型检查的准确性。
以上是如何解决Python中类型提示的循环导入?的详细内容。更多信息请关注PHP中文网其他相关文章!