Класс как декоратор#
Декоратор без аргументов#
class verbose:
def __init__(self, func):
print(f"Декорация функции {func.__name__}")
self.func = func
def __call__(self, *args, **kwargs):
print(f"У функции {self.func.__name__} такие аргументы")
print(f"{args=}")
print(f"{kwargs=}")
result = self.func(*args, **kwargs)
return result
@verbose
def upper(string):
return string.upper()
Декоратор с аргументами#
from functools import update_wrapper
class verbose:
def __init__(self, message):
print("вызов verbose")
self.msg = message
def __call__(self, func):
print(f"Декорация функции {func.__name__}")
def inner(*args, **kwargs):
print(f"У функции {func.__name__} такие аргументы")
print(f"{args=}")
print(f"{kwargs=}")
result = func(*args, **kwargs)
update_wrapper(wrapper=inner, wrapped=func)
return inner
@verbose("hello")
def upper(string):
return string.upper()