decorator_4.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from functools import wraps
  2. '''
  3. Такой декоратор работать не будет
  4. '''
  5. def html_tag(func, name_tag='h1'):
  6. def inner(*args, **kwargs):
  7. result = func(*args, **kwargs)
  8. return f'<{name_tag}>{result}</{name_tag}>'
  9. return inner
  10. def decorator_factory(a, b):
  11. print('Запуск функции создания декоратора')
  12. def decorator(fn):
  13. print('Запуск декоратора')
  14. def wrapper(*args, **kwargs):
  15. print('Запуск функции wrapper')
  16. print('Переданные аргументы: ', a, b)
  17. return fn(*args, **kwargs)
  18. return wrapper
  19. return decorator
  20. '''
  21. Можно раскрыть следующей записью
  22. decorator = decorator_factory() # получаем декоратор из decorator_factory
  23. original_func = decorator(original_func) # декорируем
  24. Или есть еще вариант
  25. original_func = decorator_facotry()(original_func)
  26. '''
  27. @decorator_factory(10, 20) # Обратите внимание на оператор вызова
  28. def original_func():
  29. print('Запуск оригинальной функции')
  30. def main():
  31. original_func()
  32. if __name__ == '__main__':
  33. main()