避免出现XY问题的背景
我使用unittest
并通过发现运行测试。我希望各种测试能够读取在运行时设置的变量GLOB
,这会创建一些循环导入。假设runner.py
是运行测试的脚本,而test_a.py
是要运行的测试文件之一,然后:
runner.py
必须导入test_a.py
(在发现过程中)才能运行测试test_a.py
必须阅读GLOB
,该信息要么生活在runner.py
内,要么生活在一个叫它的地方我认为unittest
样板与该问题无关(请参见下面的示例,其中不涉及该问题),但是针对该问题的解决方案将对我有用。
我标记了“全局变量”,但这可能不是很好的术语(somemodule.somevariable
如果不是用于循环导入技巧的话,会很好用的。)
问题和演示文件
如果模块a
导入了模块b
,则模块b
如何从模块a
读取一个值,该值在b
导入{{1}之后可以更改}?
a
:
a.py
import b
GLOB = 0
def get_glob():
'''an attempt to ensure a call at runtime, but does not solve the problem'''
return GLOB
def printy():
print('Value in a:', GLOB, get_glob())
if __name__ == '__main__':
GLOB = 1
printy() # 1, 1
b.printy() # 0, 0 not 1, 1
:
b.py
四处阅读(例如Circular (or cyclic) imports in Python),我发现大部分都是“避免循环进口”,但是(参见背景)在这里无法避免。就我而言,我可以从磁盘读/写(没有多线程或性能瓶颈),但这看起来确实很糟糕。