Декоратори надають можливість змінювати функції за допомогою інших функцій.
Це ідеально, коли вам потрібно розширити функціональність функцій, які ви не хочете змінювати.
Ми визначили функцію під назвою 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();