Можно ли программно украсить функцию / метод во время выполнения? - PullRequest
1 голос
/ 08 мая 2020

Допустим, у меня есть функция python, которая возвращает функцию

def get_function():
    @some_decorator
    def some_function():
        // some code
    return some_function

Вместо этого мне нужно что-то вроде:

def get_function():
    @some_decorator
    def some_function():
        // some code

    if some_condition:
         return some_function                    # Return some_function() with @some_decorator
    else:
         return some_function_without_decorator  # Return some_function() without @some_decorator

1 Ответ

3 голосов
/ 08 мая 2020

Декоратор просто возвращает функцию под ним, обернутую вокруг функции декоратора. Другими словами, это:

@some_decorator
def some_function():
    # some code

Эквивалентно:

some_function = some_decorator(some_function)

Это означает, что вы можете программно «украсить» функцию, написав:

if some_condition:
    some_function = some_decorator(some_function)
...