|
@@ -0,0 +1,47 @@
|
|
|
+from functools import wraps
|
|
|
+
|
|
|
+
|
|
|
+'''
|
|
|
+Такой декоратор работать не будет
|
|
|
+'''
|
|
|
+def html_tag(func, name_tag='h1'):
|
|
|
+ def inner(*args, **kwargs):
|
|
|
+ result = func(*args, **kwargs)
|
|
|
+ return f'<{name_tag}>{result}</{name_tag}>'
|
|
|
+ return inner
|
|
|
+
|
|
|
+
|
|
|
+def decorator_factory(a, b):
|
|
|
+ print('Запуск функции создания декоратора')
|
|
|
+ def decorator(fn):
|
|
|
+ print('Запуск декоратора')
|
|
|
+ def wrapper(*args, **kwargs):
|
|
|
+ print('Запуск функции wrapper')
|
|
|
+ print('Переданные аргументы: ', a, b)
|
|
|
+ return fn(*args, **kwargs)
|
|
|
+ return wrapper
|
|
|
+ return decorator
|
|
|
+
|
|
|
+
|
|
|
+'''
|
|
|
+Можно раскрыть следующей записью
|
|
|
+
|
|
|
+decorator = decorator_factory() # получаем декоратор из decorator_factory
|
|
|
+original_func = decorator(original_func) # декорируем
|
|
|
+
|
|
|
+Или есть еще вариант
|
|
|
+
|
|
|
+original_func = decorator_facotry()(original_func)
|
|
|
+'''
|
|
|
+
|
|
|
+@decorator_factory(10, 20) # Обратите внимание на оператор вызова
|
|
|
+def original_func():
|
|
|
+ print('Запуск оригинальной функции')
|
|
|
+
|
|
|
+
|
|
|
+def main():
|
|
|
+ original_func()
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ main()
|