Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI21 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Три принципа ООП
Вы можете спросить о трёх или четырёх основных принципах. Основная тройка:
1. Инкапсуляция (Encapsulation)
Идея: объект скрывает свои внутренние детали и предоставляет чёткий интерфейс для взаимодействия.
class User:
def __init__(self, name: str, age: int):
self._name = name # private
self._age = age # private
@property
def age(self) -> int:
return self._age
@age.setter
def age(self, value: int) -> None:
if value < 0 or value > 150:
raise ValueError("Invalid age")
self._age = value
В контексте тестирования:
- Инкапсулирую логику поиска элементов в Page Object
- Скрываю детали реализации (CSS селектор, XPath, текст кнопки)
- Предоставляю чистый интерфейс:
click_login_button()вместоdriver.find_element(By.XPATH, "...").click()
2. Наследование (Inheritance)
Идея: класс может наследовать свойства и методы от родительского класса, переиспользуя код.
class Animal:
def __init__(self, name: str):
self.name = name
def make_sound(self) -> str:
pass
class Dog(Animal):
def make_sound(self) -> str:
return f"{self.name} says: Woof!"
class Cat(Animal):
def make_sound(self) -> str:
return f"{self.name} says: Meow!"
В контексте тестирования:
- Создаю базовый Page Object для всех страниц
- Наследую специфичные страницы (LoginPage, ProfilePage)
- Общие методы (wait, click) находятся в базовом классе
3. Полиморфизм (Polymorphism)
Идея: один интерфейс может работать с объектами разных типов. Один метод может иметь разную реализацию в разных классах.
class PaymentMethod:
def pay(self, amount: float) -> str:
pass
class CreditCard(PaymentMethod):
def pay(self, amount: float) -> str:
return f"Paid {amount} with Credit Card"
class PayPal(PaymentMethod):
def pay(self, amount: float) -> str:
return f"Paid {amount} with PayPal"
def process_payment(method: PaymentMethod, amount: float):
return method.pay(amount)
В контексте тестирования:
- Создаю общий интерфейс для разных драйверов (Selenium, Playwright, Appium)
- Один тест может работать с любым драйвером
Бонус: четвёртый принцип — Абстракция (Abstraction)
Абстракция часто называют четвёртым принципом.
Идея: упростить сложность, показав только необходимые детали.
from abc import ABC, abstractmethod
class DatabaseConnection(ABC):
@abstractmethod
def connect(self):
pass
@abstractmethod
def query(self, sql: str):
pass
class PostgresConnection(DatabaseConnection):
def connect(self):
print("Connecting to PostgreSQL...")
Применение в тестировании
Эти принципы — фундамент для:
- DRY (Don't Repeat Yourself) — наследование и инкапсуляция
- SOLID — S, O, L, I, D опираются на эти три принципа
- Page Object Model — инкапсуляция + полиморфизм
- Масштабируемые тест-фреймворки — без ООП тесты быстро становятся спагетти-кодом