首页 > 解决方案 > Python 循环导入让我发疯

问题描述

来自 helpers.py:

import ...

from datasets import my_datasets

class Printable():
    def __str__(self):
        return 'foobar'


def get_some_dataset(ds_id):
    return my_datasets.get(ds_id, None)

来自 datasets.py:

import ...

from helpers import Printable

class Dataset(Printable):
    def __init__(self, param):
        self.baz = param

my_datasets = {
    'id1': Dataset(foo),
    'id2': Dataset(bar)
}

而现在 Python 尖叫着

ImportError:无法从“帮助者”导入名称“可打印”

如果我完全删除 Printable 依赖项,一切正常。

如果我稍微更改 datasets.py 中的导入:

import helpers as ma_helpers

class Dataset(ma_helpers.Printable):
   ...

然后错误信息变为:

AttributeError:模块 'helpers' 没有属性 'Printable'

如何使用Printable来自 datasets.py 的 helpers.py,同时使用my_datasets来自 helpers.py 的 datasets.py?

标签: pythonpython-3.xpython-importcircular-dependency

解决方案


假设您对这两个模块都有编辑权限,并且 helpers.py 包含自包含的辅助函数,您可能希望将与 dataset.py 相关的辅助代码移动到 dataset.py - 这可能会稍微减少模块化,但它会解决循环的最快方法。


推荐阅读