首页 > 后端开发 > Python教程 > 如何避免 Python 中的循环导入及其后果是什么?

如何避免 Python 中的循环导入及其后果是什么?

Susan Sarandon
发布: 2024-12-18 05:44:14
原创
806 人浏览过

How Can Circular Imports in Python Be Avoided and What Are Their Consequences?

Python 中循环导入的后果

当两个或多个模块尝试相互导入时,就会出现循环导入。虽然简单的导入可能会顺利运行,但当一个模块尝试从另一个也尝试从中导入的模块导入特定名称或属性时,就会出现问题。

问题:直接循环导入

直接循环导入,模块尝试使用直接导入语句将彼此作为一个整体导入。例如:

# foo.py
import bar

# bar.py
import foo
登录后复制

最初,两个模块加载都没有问题。但是,如果一个模块尝试访问需要另一模块完全加载的名称,则可能会发生运行时错误。

解决方案:间接循环导入

要避免运行时错误,请使用间接导入,其中模块导入属性或特定名称而不是整个模块。例如:

# foo.py
from bar import xyz

# bar.py
from foo import abc
登录后复制

此方法允许两个模块导入必要的属性,而不需要完全加载它们。

例外:Python 2 和特定场景

Python 2 在循环导入方面表现出略有不同的行为。在某些特定场景下,例如从模块顶部导入、不使用“from”、仅使用相对导入,循环导入可能在 Python 2 中有效,但在 Python 3 中无效。

其他示例

以下示例说明了 Python 中允许循环导入的其他场景:

  • 模块底部,导入属性,而不是模块; "from" import
  • 函数顶部; “from”导入
  • 模块顶部; “从”导入可以;相对还好;仅限 Python 3

以上是如何避免 Python 中的循环导入及其后果是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板