我有两个模块:
#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方式?
答案 0 :(得分:1)
要以“ Pythonic”方式执行此操作,您应该引入观察者模式,该模式一旦计算出a便会发出事件,并且b应当订阅a以便在a完成后被调用。
这里有一个observer example