我有一个像这样的图书馆。 wckg是库名
wckg:
__init__.py
api/wckg_api.py
在__init__.py
中,我导入wckg_api
范围并定义了一个枚举:
from wckg.api import wckg_api
class RelType(Enum):
a = 1
b = 2
WCKG = wckg_api.Wckg()
在api/wckg_api.py
中:
from wckg import RelType
class Wckg(object):
pass
如您所见,它从wckg_api.py
导入RelType
的{{1}},并同时从__init__
导入wckg_api
进行创建wckg.api.py
对象。这是循环的,它报告一个错误:
ImportError:无法从“ wckg”(/ Users / comin / nlpc / wckg / wckg / init .py)
导入名称“ RelType”
是否可以解决此问题? init 定义了接口,而wckg_api.py应该定义了接口的实现。我不想在wckg_api.py中定义常量RelType,因为当用户从 init 调用函数时,我不希望用户导入这些常量类型。这些类型可以立即对用户可用。但是由于 init 还需要从wckg_api.py导入某些内容,因此会产生此循环导入问题。
这是一个典型的问题吗?
答案 0 :(得分:1)
我会这样解决:
wckg:
__init__.py
api/wckg_api.py
api/_rel_type.py
api / wckg_api.py:
from ._rel_type import RelType
class Wckg(object):
pass
api / _rel_type.py:
class RelType(Enum):
a = 1
b = 2
和__init__.py
下:
from wckg.api import wckg_api, RelType
WCKG = wckg_api.Wckg()