Как избежать циклического импорта зависимых классов в python? - PullRequest
0 голосов
/ 29 августа 2018

ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ ПЕРЕД МАРКИРОВКОЙ КАК ДУБЛИКАТА

У меня есть каталог, настроенный так:

app.py  
Modules/  
    __init__.py  
    a.py  
    b.py  

Где __init__.py содержит:

import a  
import b

и a.py содержит:

import b
Class A():
    b_instance = b.B()`

и b.py содержит:

import a
Class B():
    a_instance = a.A()`

Вся эта папка /Modules импортирована из основного файла app.py.

Насколько я понимаю, казнь будет выглядеть следующим образом:
1. app.py import Modules
2. /Модули/__init__.py import a
3. / Модули/a.py import b
4. /Modules/b.py import a (видит, что a уже есть в sys.modules и продолжается)
5. /Modules/b.py выполняет класс B () и завершается неудачно при попытке выполнить: a_instance = a.A(), поскольку, хотя a.py находится в sys.modules, он еще не выполнил class A и, следовательно, b.py не может получить доступ Class A

Как тогда, я могу иметь два класса, которые зависят друг от друга, и эта зависимость связана в самой высокой области видимости класса (то есть не в методе класса)?

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

...