Абстрактные классы и методы
Абстрактные классы и методы в 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?