Я не уверен, возможно ли что-то подобное в 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 - это методы, которые определены в модуле конфигурации (или в модуле бегуна, который импортирует обе команды config /). Есть ли способ отложить оценку этих функций до тех пор, пока они действительно не будут определены?
Я также был бы открыт для других способов достижения той же цели. Единственная другая идея, которая у меня была, заключалась в том, чтобы модуль config записывал словарь в файл и затем импортировал этот модуль команд (при условии, что вы просто выписали repr(mydict)
). Это не очень привлекательно ... хотя это сработало бы.