Декоратори

Декоратори надають можливість змінювати функції за допомогою інших функцій. 

Це ідеально, коли вам потрібно розширити функціональність функцій, які ви не хочете змінювати.


Ми визначили функцію під назвою decor , яка має один параметр func . Всередині decor ми визначили вкладену функцію під назвою wrap . Функція wrap надрукує рядок, потім викличе func() і надрукує інший рядок. Функція decor повертає функцію wrap як результат.

Ми могли б сказати, що змінна decorated є декорованою версією print_text -- це print_text плюс щось.

Фактично, якби ми написали корисний декоратор, ми могли б захотіти повністю замінити print_text декорованою версією, щоб ми завжди отримували нашу «плюс щось» версію print_text.

Це робиться шляхом повторного призначення змінної, яка містить нашу функцію:


def decor(func):

    def wrap():

        print("============")

        func()

        print("============")

    return wrap


def print_text():

    print("Hello world!")


decorated = decor(print_text)

decorated()

ated = decor(print_text) decorated() 

def decor(func):

    def wrap():

        print("============")

        func()

        print("============")

    return wrap


@decor

def print_text():

    print("Hello world!")


print_text();