当两个或多个模块尝试相互导入时,就会出现循环导入。虽然简单的导入可能会顺利运行,但当一个模块尝试从另一个也尝试从中导入的模块导入特定名称或属性时,就会出现问题。
直接循环导入,模块尝试使用直接导入语句将彼此作为一个整体导入。例如:
# foo.py import bar # bar.py import foo
最初,两个模块加载都没有问题。但是,如果一个模块尝试访问需要另一模块完全加载的名称,则可能会发生运行时错误。
要避免运行时错误,请使用间接导入,其中模块导入属性或特定名称而不是整个模块。例如:
# foo.py from bar import xyz # bar.py from foo import abc
此方法允许两个模块导入必要的属性,而不需要完全加载它们。
Python 2 在循环导入方面表现出略有不同的行为。在某些特定场景下,例如从模块顶部导入、不使用“from”、仅使用相对导入,循环导入可能在 Python 2 中有效,但在 Python 3 中无效。
以下示例说明了 Python 中允许循环导入的其他场景:
以上是如何避免 Python 中的循环导入及其后果是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!