У меня есть два модуля:
#module_a
def make_a(cb = None):
global a
a = 1 # It takes a very long time to make "a", so it is stored as a global in module_a.
if cb != None:
cb()
И
#module_b
import module_a
def make_b():
global b
#In order to make "b", we need module_a.a, however there is no guarantee it has been made.
if 'a' not in dir(module_a):
module_a.make_a(make_b)
return
else:
b = module_a.a + 1
make_b()
print(b) # 2
В приведенном выше коде функция make_b
в module_b
создает нечто с именем b
, что зависит от чего-то с именем a
в module_a
. Чтобы удовлетворить свою зависимость, он вызывает make_a
с обратным вызовом make_b
. Как только a
сделан, тогда make_b
вызывается снова и b
сделан.
Этот паттерн имеет для меня смысл, но мне интересно, является ли это общепринятым подходом к этому или же это анти-паттерн.
Существует ли более канонический подход к удовлетворению такой зависимости в Python, т.е. путь Pythonic?