from functools import wraps ''' Этот декоратор демонстрирует способ сохранить данные об исходной функции def table(func): def inner(*args, **kwargs): print('') func(*args, **kwargs) print('
') inner.__name__ = func.__name__ inner.__doc__ = func.__name__ inner.__annotations__ = func.__annotations__ return inner ''' """ Это другой способ сохранить данные об исходной функции """ def table(func): @wraps(func) def inner(*args, **kwargs): print('') func(*args, **kwargs) print('
') return inner @table def print_sqr_number(x: int) -> None: """ Печатает квадрат числа x :param x :retrun: None """ print(x ** 2) ''' @table def say_hello(name: str, surname: str) -> None: """Функция приветствует человека""" print("Hello", name, surname) ''' @table def say_bye(name): print('Hello', name) def dec(fn): print("Запуск декоратора") def wrapper(*args, **kwargs): print("Запуск inner") return fn(*args, **kwargs) return wrapper @dec def say_hello() -> None: return 'Hello' def main(): ''' print(f'{say_hello.__name__ = }') print(f'{say_hello.__doc__ = }') print(f'{say_hello.__annotations__ = }') print(f'{say_hello.__name__ = }') print(f'{say_bye.__name__ = }') ''' ''' print(f'{print_sqr_number.__name__ = }') print(f'{print_sqr_number.__doc__ = }') print(f'{print_sqr_number.__annotations__ = }') print_sqr_number(6) ''' print(say_hello()) print(say_hello()) if __name__ == '__main__': main()