我不确定在 Python 中这样的事情是否可能,但如果是的话,它会非常有用(至少在这种情况下对我来说)。
我有一个测试框架,我想在其中将测试配置与测试命令分开。这很有用,因为它允许您混合和匹配配置/测试,而无需实际修改任何代码。我本质上只是一个简短的运行脚本,它采用配置模块和测试模块的名称,然后加载并运行两者,如下所示:
config = __import__(configmod)
test = __import__(commandsmod)
config.run(test.commands)
唯一的问题是我实际上希望测试脚本对配置参数有一些有限的认识。理想情况下,我希望能够在 test/commands 模块中执行以下操作:
command1 = MyCommand(arg1, arg2, LazyArg1())
command2 = MyCommand(arg1, arg2, LazyArg2())
commands = [command1, command2]
其中 LazyArg1 和 LazyArg2 是在配置模块(或导入两个配置/命令的运行器模块)中定义的方法。有什么方法可以延迟对这些函数的评估,直到它们被实际定义?
我也愿意接受其他方式来达到同样的目的。我唯一的另一个想法是让配置模块将字典写入文件,然后让命令模块导入它(假设你只是写出repr(mydict)
)。这不是很吸引人..虽然它会起作用。