来自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'
如何使用来自datasets.py的helpers.py的Printable
,同时使用来自helpers.py的datas.py的my_datasets
?
答案 0 :(得分:2)
假设您对两个模块都具有编辑权限,并且helpers.py包含独立的帮助程序功能,则可能需要将与dataset.py相关的帮助程序代码移至dataset.py-这可能会稍微降低模块化程度,但是这将是解决周期的最快方法。
答案 1 :(得分:0)
收到循环依赖项错误的原因是,您正在helper.py
中从dataset.py
导入内容,反之亦然。该方法是错误的。考虑到您正在尝试进行一些OOP并对其进行测试,让我们像下面这样重写代码-
domain.py
=========
class Printable():
def __str__(self):
return 'foobar'
class Dataset(Printable):
def __init__(self, param):
self.baz = param
test.py
=======
from domain import Dataset
my_datasets = {
'id1': Dataset(foo),
'id2': Dataset(bar)
}
def get_some_dataset(ds_id):
return my_datasets.get(ds_id, None)
现在,如果您尝试从get_some_dataset
导入test
并尝试执行它,那么它将起作用。