Покажу вам как создавать простой декоратор Python. Приведу вам код простого декоратора, который показывает время выполнения функции. Перед вами декораторная функция, но помните что может быть и класс в виде декоратора. Декоратор оборачивает функцию или класс, не меняя внутреннюю структуру. Он добавляет новую логику, расширяя функционал. Декоратор может добавлять код перед оборачиваемой функции или за ней. Удобство декоратора в том, что при его блокировке функция работает как прежде без декоратора. Декораторы нужны для простых задач:
Декораторы могут накладываться друг на друга. В этом случае они работают по очереди.
#!/usr/local/bin/python
import time
from functools import wraps
def decorator(trace=True):
def on_decorator(func):
@wraps(func)
def on_call(*args, **kargs):
start = time.time()
result = func(*args, **kargs)
end = time.time() - start
if trace:
print(round(end, 4))
return result
return on_call
return on_decorator
@decorator(True)
def sum_test(x, y):
time.sleep(1.2)
return x + y
print(sum_test(1, 3))
На собеседованиях очень часто спрашивают о декораторах. Вы должны легко писать декораторы. На лайвкодингах вас могут попросить написать несложный декоратор.
Еще есть такой шаблон проектирования - декоратор. Он тоже на класс накидывает нужные свойства. Не запутайтесь )