Назад к вопросам
Middle
88
questionbank
Что такое декоратор в контексте программирования?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Декоратор — это структурный паттерн проектирования, позволяющий динамически добавлять новые обязанности объектам, оборачивая их в специальные объекты-декораторы. Он предоставляет более гибкую альтернативу наследованию для расширения функциональности.
Ключевые идеи:
- Оборачивание: Декоратор содержит ссылку на оборачиваемый объект.
- Делегирование: Декоратор делегирует вызовы методов оборачиваемому объекту, при этом может выполнять дополнительную логику до или после вызова.
- Расширение функциональности: Позволяет добавлять поведение объектам без изменения их структуры или использования подклассов.
Применение в QA Automation:
- Логирование действий: Добавление логирования к методам взаимодействия с элементами страницы.
- Обработка исключений: Добавление универсальной обработки исключений к вызовам функций.
- Повторные попытки: Реализация механизма повторных попыток выполнения flaky тестов или действий.
- Внедрение пред/пост-условий: Выполнение определенных действий до или после основного шага теста.
Пример на Python:
def log_method_call(func):
# Декоратор, который логирует вызов функции
def wrapper(*args, **kwargs):
print(f"Calling function: {func.__name__} with args: {args}, kwargs: {kwargs}")
result = func(*args, **kwargs)
print(f"Function {func.__name__} returned: {result}")
return result
return wrapper
class PageObject:
def __init__(self, driver):
self.driver = driver
@log_method_call
def click_button(self, locator):
# Пример метода, который использует декоратор
print(f"Clicking element located by: {locator}")
# Имитация действия драйвера
# self.driver.find_element(*locator).click()
return "Button Clicked"
# Использование
# driver = ... # Инициализация драйвера
# page = PageObject(driver)
# page.click_button(("ID", "submit_button"))