Циклический импорт из классов, атрибуты которых ссылаются друг на друга.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Циклический импорт из классов, атрибуты которых ссылаются друг на друга.

Сообщение Anonymous »

Я знаю, что существует много вопросов о циклическом импорте. Я просмотрел многие из них, но, похоже, не могу понять, как применить их к этому сценарию.
У меня есть пара классов загрузки данных для импорт данных из документа Excel с несколькими листами. Каждый из листов настраивается, поэтому имя листа и имена отдельных столбцов могут меняться (но для них есть значения по умолчанию, определенные в атрибутах класса).
Между двумя листами существуют и другие ссылки между классами. рассматриваемые классы, но я решил, что этот пример был наиболее простым:
Одной из особенностей отдельного сценария экспорта является использование метаданных загрузчиков для заполнения шаблона Excel (с несколько листов). В этом шаблоне есть комментарии к заголовкам столбцов на каждом листе, которые ссылаются на другие листы, поскольку содержимое некоторых листов используется для заполнения раскрывающихся списков на других листах.
Таким образом, комментарий в заголовке в на одном листе может быть написано: «Данные раскрывающегося списка этого столбца заполнены содержимым столбца X на листе 2». А в заголовке столбца X листа 2 будет комментарий: «Содержимое этого столбца используется для заполнения раскрывающихся списков для столбца Y на листе 1».
Я пошел дальше и добавил соответствующий импорт, зная, что В конечном итоге у меня возникла проблема с циклическим импортом, но я решил, что мне нужно концептуально определить, что я хочу сделать, а затем попытаться решить проблему импорта.
Вот небольшой игрушечный код. попытаться свести это к минимуму:

Код: Выделить всё

infusates_loader.py
:

Код: Выделить всё

from DataRepo.loaders.tracers_loader import TracersLoader

class InfusatesLoader(TableLoader):
DataColumnMetadata = DataTableHeaders(
TRACERNAME=TableColumn.init_flat(
...
source_sheet=TracersLoader.DataSheetName,
source_column=TracersLoader.DataHeaders.NAME,
),
)

Код: Выделить всё

tracers_loader.py
:

Код: Выделить всё

from DataRepo.loaders.infusates_loader import InfusatesLoader

class TracersLoader(TableLoader):
DataColumnMetadata = DataTableHeaders(
NAME=TableColumn.init_flat(
...
# Cannot reference the InfusatesLoader here (to include the name of its
# sheet and its tracer name column) due to circular import
target_sheet=InfusatesLoader.DataSheetName,
source_column=InfusatesLoader.DataHeaders.TRACERNAME,
),
)
На данный момент мне удалось избежать этой проблемы, просто установив значения статических строк в файлеtracers_loader.py, но в идеале эти значения должны храниться только в одном месте (каждое в своем соответствующий класс).
Многие вопросы по циклическому импорту связаны с методами, поэтому я не думаю, что они применимы к атрибутам класса? Я пробовал использовать importlib и пытался выполнить импорт внутри функции, но как только он попытался настроить класс, я получил ошибку импорта.

Подробнее здесь: https://stackoverflow.com/questions/784 ... ne-another
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»