Sobes.tech
Middle
98
questionbank

Что такое декоратор в контексте программирования?

Ответ от нейросети

sobes.tech AI

Декоратор — это шаблон проектирования, позволяющий динамически добавлять новое поведение существующим объектам, оборачивая их в специальные "объекты-обертки" без изменения их структуры.

Ключевые принципы:

  • Динамическое добавление поведения: Функциональность добавляется во время выполнения, а не статически.
  • Прозрачность для клиента: Клиентский код взаимодействует с декоратором, как будто это оригинальный объект.
  • Гибкость: Позволяет комбинировать различные декораторы для достижения нужного поведения.

Пример в Python:

def my_decorator(func):
    def wrapper():
        print("Перед вызовом функции")
        func()
        print("После вызова функции")
    return wrapper

@my_decorator
def say_hello():
    print("Привет!")

# Вызов функции с примененным декоратором
say_hello()

В данном примере @my_decorator синтаксическим сахаром эквивалентно say_hello = my_decorator(say_hello).

Пример в JavaScript:

function logCall(target, key, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args) {
        console.log(`Вызов метода ${key} с аргументами: ${args}`);
        const result = originalMethod.apply(this, args);
        console.log(`Метод ${key} вернул: ${result}`);
        return result;
    };
    return descriptor;
}

class Example {
    @logCall
    add(a, b) {
        return a + b;
    }
}

const instance = new Example();
instance.add(2, 3);

Здесь @logCall используется для добавления логирования к методу add класса Example.

Применение в QA Automation:

  • Логирование: Добавление логирования к шагам тестов или взаимодействиям с элементами.
  • Обработка исключений: Обертывание вызовов функций для обработки специфических исключений.
  • Управление состоянием: Изменение состояния объекта перед или после вызова его методов (например, переключение контекстов).
  • Аутентификация/авторизация: Проверка прав доступа перед выполнением определенного действия.