Как исправить здесь циклический импорт? - PullRequest
1 голос
/ 10 июля 2020

У меня два файла mainfile.py и lists.py. mainfile.py имеет класс Foo с методами, которые зависят от списков. Я скормлю ему несколько списков из lists.py. Но в одном из списков из lists.py будет элемент, который использует метод из класса Foo в mainfile.py. Примерно так:

# mainfile.py
import lists

list_1 = lists.list_1
list_2 = lists.list_2

class Foo:
    method_1(lst1, lst2, lst3):
        pass
        # does stuff with those lists

    method_2():
        pass
        # will be used on lists.py

# lists.py
import mainfile

list_1 = ['a', 'b', 'c']
list_2 = ['depending', 'on', mainfile.Foo.method2(), 'method']

Изначально делал from mainfile import Foo. Однако я изменил его на import Foo, как сказал ответ здесь, на SO. Но все равно не работает. При запуске mainfile.py:

AttributeError: частично инициализированный модуль 'lists' не имеет атрибута 'list_1' (скорее всего, из-за циклического импорта)

Я попытался переместить import в конец lists.py, но тогда mainfile в mainfile.Foo.method2() не определено.

Что мне здесь делать? что-то рефакторинг? или я неправильно импортирую эти файлы?

PS Я бы сделал все в одном файле, но lists.py в конечном итоге будет иметь много списков в нем, поэтому я бы предпочел оставить он отдельный.

1 Ответ

0 голосов
/ 10 июля 2020

Проблема в том, что оба файла импортируют друг друга, что вызывает своего рода рекурсивный l oop import. Python не могу завершить sh импорт lists.py без завершения импорта mainfile.py. И он не может импортировать mainfile.py, не завершив импорт lists.py, поэтому он завис.

Есть два решения этой проблемы.

Во-первых, поместите все в один файл и не выполняйте импорт.

Во-вторых, определите третий файл с вещами, которые нужны обоим другим двум, но которому не нужно ничего из двух других.

...