如何解决此循环导入问题?

时间:2020-10-26 16:59:26

标签: python

我有一个像这样的图书馆。 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导入某些内容,因此会产生此循环导入问题。

这是一个典型的问题吗?

1 个答案:

答案 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()