TelenkovDmitry пре 3 месеци
родитељ
комит
36357a7c23
1 измењених фајлова са 47 додато и 0 уклоњено
  1. 47 0
      courses/python_func/decorator_4.py

+ 47 - 0
courses/python_func/decorator_4.py

@@ -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()