首页  >  文章  >  后端开发  >  如何避免 Python 类型提示中的循环导入?

如何避免 Python 类型提示中的循环导入?

Linda Hamilton
Linda Hamilton原创
2024-10-23 13:34:02203浏览

How to Avoid Cyclic Imports in Python's Type Hinting?

Python 中的类型提示,无需循环导入

问题:

拆分大类时到多个文件中,循环导入可能会阻止类型提示正常工作。具体来说,在 mixin 类中导入“主”类会产生循环依赖,从而阻碍类型检查。

解决方案:

对于 Python 3.4:

使用以下代码结构:

<code class="python"># main.py

import mymixin.py

class Main(object, MyMixin):
    def func1(self, xxx):
        ...

# mymixin.py

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self: 'Main', xxx):  # Note the string type hint
        ...</code>

TYPE_CHECKING 常量确保 main.py 的导入仅在类型检查期间进行评估,避免循环导入错误。

对于 Python 3.7 :

Python 3.7 引入了一个更优雅的解决方案:

<code class="python"># main.py

import mymixin.py

class Main(object, MyMixin):
    def func1(self, xxx):
        ...

# mymixin.py

from __future__ import annotations
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self: Main, xxx):  # No need for a string type hint
        ...</code>

future 导入注释导入启用了字符串类型提示并避免在运行时评估它们。

其他注意事项:

  • Mypy 可能需要创建一个由 Main 和 MyMixin 继承的抽象基类 (ABC),以确保正确的类型检查。
  • PyCharm 的检查器可能也需要类似的方法来实现最大兼容性。

以上是如何避免 Python 类型提示中的循环导入?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn