Я пытаюсь назначить функцию другой функции, левая часть задания доступна мне как строка. Например, тело метода я ищу,Python назначает функцию другой функции
def change_function_defintion(name_of_function = 'module1.function1'
, function_object):
# Can I do eval(name_of_function) = function_object ? will that work?
pass
Вопросы:
- Как этого добиться? Очевидно, если я вызову вышеуказанный метод, а затем вызову module.function1, я ожидаю, что новая функция будет поднята.
- Я делаю это в контексте модульного тестирования. Я выполняю несколько функций, запускаю тест и затем в основном «отключаю» их. Существуют ли какие-либо проблемы с этим подходом?
Возможный дубликат [Как динамически загружать класс Python] (http: // stackoverflow.com/questions/547829/how-to-dynamically-load-a-python-class) –
Подобно классам, функции являются первоклассными объектами. Вы можете динамически импортировать модуль, а затем получить функцию как атрибут. –
Обратите внимание, что это определенно отличается от вопроса «Как динамически загружать класс Python». Я явно просил о каких-либо улучшениях/проблемах с использованием метода eval и совершенно справедливо указал на структуру MOCK для python, которая включена по умолчанию в python. 3.3. –