循环进口之间共享状态

时间:2019-11-27 16:09:57

标签: python global-variables python-unittest

避免出现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),我发现大部分都是“避免循环进口”,但是(参见背景)在这里无法避免。就我而言,我可以从磁盘读/写(没有多线程或性能瓶颈),但这看起来确实很糟糕。

0 个答案:

没有答案