没有循环导入的 Python 中的类型提示
在尝试将一个大类分成两个较小的类时,您会遇到循环问题进口。 “main”类导入 mixin 类,并且 mixin 类在其类型提示中引用“main”类。这会导致导入循环,导致类型提示无法正常工作。
要解决此问题,可以考虑以下方法:
# 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):
...
# 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):
...
在此示例中,Python 的 TYPE_CHECKING 常量用于有条件地导入“main”类。运行代码时,由于常量为 False,因此跳过 import 语句。然而,像 mypy 这样的类型检查工具会解释 if TYPE_CHECKING 块中的代码并识别 func2 的类型注释。
另一种方法涉及使用前向引用:
# 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'):
...
这里,func2的类型注释是一个字符串,表示稍后将导入的类的名称。这两种方法都需要使用 Python 3.7 或更高版本才能有效地使用类型提示。
请记住,使用 mixins 和类型提示可能需要在代码中进行额外的结构化。例如,mypy 建议创建一个抽象基类 (ABC),您的“主”类和 mixin 类都继承自该抽象基类。这可以提高类型检查的准确性。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3