Pythonic Способ структурирования API модуля с циклическим импортом - PullRequest
0 голосов
/ 10 октября 2018

Как мне разрешить следующую циклическую зависимость?

У меня есть файл A, который предоставляет методы API и делегирует всю логику бэкэнда в отдельный файл A_impl.

В A.py я также предоставляю Enum, который клиенты должны передавать в качестве аргумента некоторым из методов API:

# A.py
import A_impl

class MyEnum(Enum):
    ONE = 1
    TWO = 2
    THREE = 3

def A(x: MyEnum):
    return A_impl._A(x)

A_impl фактически нуждается в MyEnum:

#A_impl.py
from A import MyEnum

def _A(x: MyEnum):
    pass

Один из способов решения этой проблемы - просто объединить два модуля, но это в первую очередь сводит на нет цель разделения его на более чистый код.A_impl состоит из десятков вспомогательных функций, и размещение открытых и закрытых методов в одном модуле становится беспорядочным.

1 Ответ

0 голосов
/ 10 октября 2018

Вы можете импортировать A_impl внутри определения A вместо:

# A.py

class MyEnum(Enum):
    ONE = 1
    TWO = 2
    THREE = 3

def A(x: MyEnum):
    import A_impl
    return A_impl._A(x)
...