Абстрактные классы и методы
Абстрактные классы и методы в Python — это инструмент, который помогает задавать структуру для других классов, чтобы они обязательно реализовали определённые методы.
1. Что такое абстрактный класс
- Это класс-шаблон, который нельзя напрямую создать (инстанцировать). 
- В нём могут быть как реализованные методы, так и абстрактные методы, которые должны реализовать наследники. 
- Используется для контрактов: мы говорим, что любой класс-наследник обязан иметь определённые методы. 
2. Что такое абстрактный метод
- Метод, который объявлен, но не имеет реализации (тело метода — - passили- ...).
- Декорируется - @abstractmethodиз модуля- abc.
- Наследник обязан реализовать его, иначе тоже станет абстрактным классом. 
3. Как использовать
from abc import ABC, abstractmethod
class BaseTest(ABC):  # Наследуемся от ABC
    @abstractmethod
    def run_test(self):
        """Запускает тест — должен быть реализован в наследнике"""
        pass
    
    def log(self, message):
        print(f"[LOG]: {message}")
# Нельзя создать экземпляр BaseTest — выдаст ошибку
# BaseTest()
class LoginTest(BaseTest):
    def run_test(self):  # Реализуем абстрактный метод
        self.log("Запускаю тест авторизации")
        print("Проверка логина... OK")
test = LoginTest()
test.run_test()4. Особенности
- Если класс наследует абстрактный, но не реализует все абстрактные методы, он сам становится абстрактным. 
- Абстрактные классы можно использовать как интерфейсы. 
- Можно создавать частично абстрактные классы, в которых часть методов реализована. 
5. Применение в автоматизации тестирования
- Page Object Model (POM): можно сделать базовый класс страницы с обязательным методом - is_open()для проверки, что страница загружена.
- Фреймворки тестов: базовый тест с методом - run_test()или- prepare_data(), который обязательно должен быть в каждом тесте.
- API тесты: базовый клиент с обязательным методом - send_request().
6. Пример в Page Object
from abc import ABC, abstractmethod
class BasePage(ABC):
    @abstractmethod
    def is_open(self):
        pass
class LoginPage(BasePage):
    def is_open(self):
        print("Проверка, что страница логина открыта")
        return True
page = LoginPage()
print(page.is_open())Last updated
Was this helpful?
