Я использую функции из внешних библиотек (например, scipy.optimize.minimize ) и для удобства я обернул их для предварительной обработки и последующей обработки аргументов. Мне известно о оболочках декоратора от functools , но я не могу найти способ использовать его должным образом.
Вот базовый пример того, что я делаю:
def wrapper(outer_arg, **inner_arguments):
inner_arg = prepare_inputs(outer_arg)
inner_output = inner_function(inner_arg, **inner_arguments)
outer_output = prepare_outputs(inner_output)
return outer_output
Проблема в том, что я теряю строку документации из inner_function при вызове help и я не хочу копировать все аргументы в объявлении оболочки. Я попытался добавить декоратор wraps следующим образом:
@wraps(inner_function)
def wrapper(outer_arg, **inner_arguments):
inner_arg = prepare_inputs(outer_arg)
inner_output = inner_function(inner_arg, **inner_arguments)
outer_output = prepare_outputs(inner_output)
return outer_output
Но затем я теряю строку документации wrapper при вызове help .
Есть ли способ написать эту функцию, которая бы дала пользователю представление как об оболочке , так и о inner_function (и возможность использовать автозаполнение и т. Д. ...) ?
Спасибо