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

Linda Hamilton
发布: 2024-10-23 13:34:02
原创
202 人浏览过

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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!