DEV Community

Cover image for Декоратори

Декоратори

Декоратори - це спеціальні функції, що дозволяють модифікувати або розширювати поведінку інших функцій або методів без зміни їхнього коду. Це приклад паттерну "Декоратор" у програмуванні.
Декоратори можуть бути корисними для:

  • Переписування поведінки функцій: Наприклад, логування, валідації, кешування, результатів.
  • Удосконалення коду: Виносити повторювану логіку, наприклад, оброблення винятків чи вимірювання часу виконання.
  • Простоти коду: Замість дублювання однієї й тієї ж логіки в кількох функціях, її можні виносити в декоратор.

Top comments (2)

Collapse
 
gr555 profile image
Григорій Лізанець • Edited

Цікава і важлива деталь при використовуванні декораторів -

def first_decorator(func):
    def wrap():
        print('before')
        func()
        print('after')
    return wrap


@first_decorator
def test():
    """test function docs"""
    print('text inside')


decorated_func = first_decorator(test)


decorated_func()


print(test.__name__ ) # 'wrap'
Enter fullscreen mode Exit fullscreen mode
  • Декоратор, що повертає функцію-обгортку заодно змінює __name__ функції, що "обгорнута"
Collapse
 
gr555 profile image
Григорій Лізанець

Як працюють декоратори?

Декоратор — це функція, яка приймає іншу функцію як аргумент, змінює або розширює її поведінку, а потім повертає нову функцію.

@decorator_function
def target_function():
    pass
Enter fullscreen mode Exit fullscreen mode

Це те саме, що

def target_function():
    pass

target_function = decorator_function(target_function)
Enter fullscreen mode Exit fullscreen mode