Задать вопрос
@We1rd

Как передать параметр в декоратор в рантайме?

Структура примерно такая
def formatter(p1, p2):
    def decorator(parse_func):
        def output_func(*args):
            ...


@formatter(p1, p2)
def csv_reader(filename, request):
    ...


def main():
    filename = input()
    request = input()
    a1 = input()
    a2 = input()

if __name__ == "__main__":
    main()

Надо передать a1, a2 в аргументы p1, p2, естественно после получения из консоли. Можно ли это реализовать?
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Декорировать функцию после получения параметров. Не забывай, что
@formatter(p1, p2)
def csv_reader(filename, request):
    ...

эквивалентно
def csv_reader(filename, request):
    ...

_temp = formatter(p1, p2)
csv_reader = _temp(csv_reader)


Альтернативно, пусть возвращаемая фукнкция имеет свойства:
def formatter(parse_func):
    def output_func(*args):
        ...  # тут обращаемся к output_func.p1, например

    output_func.p1 = p1
    output_func.p2 = p2
    return output_func


@formatter
def csv_reader(filename, request):
    ...

csv_reader.p1 = a1
csv_reader.p2 = a2

Вместо функции можно вообще вернуть callable object, т.е. объект класса с методом __call__(), и любыми нужными свойствами и методами.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы