Каково назначение абстрактных классов в Python

Ответ

Абстрактный класс (Abstract Base Class, ABC) в Python — это класс, который не может иметь экземпляров и предназначен для использования в качестве базового класса (шаблона) для других классов.

Он определяет контракт: набор методов и свойств, которые должны быть реализованы во всех дочерних классах. Это обеспечивает единый и предсказуемый интерфейс для группы связанных классов.

Ключевые цели использования:

  1. Определение интерфейса: Гарантирует, что все подклассы будут иметь определённую структуру и функциональность.
  2. Предотвращение инстанцирования: Запрещает создание объектов базового класса, который сам по себе не имеет полной реализации.
  3. Повторное использование кода: Общая для всех подклассов логика может быть реализована в абстрактном классе, а специфичная — в дочерних.

Для создания абстрактных классов в Python используется модуль abc.

Пример:

from abc import ABC, abstractmethod

# Абстрактный класс, определяющий интерфейс для всех "транспортных средств"
class Vehicle(ABC):
    def __init__(self, brand):
        self.brand = brand

    @abstractmethod  # Этот метод ОБЯЗАН быть реализован в подклассах
    def move(self):
        pass

# Конкретный класс, реализующий контракт
class Car(Vehicle):
    def move(self):
        return f"Автомобиль {self.brand} едет по дороге."

class Boat(Vehicle):
    def move(self):
        return f"Лодка {self.brand} плывет по воде."

# vehicle = Vehicle("SomeBrand")  # Ошибка TypeError: Can't instantiate abstract class

car = Car("Tesla")
print(car.move())  # Вывод: Автомобиль Tesla едет по дороге.

boat = Boat("Yamaha")
print(boat.move()) # Вывод: Лодка Yamaha плывет по воде.

Таким образом, абстрактные классы являются мощным инструментом для построения надежных и расширяемых иерархий классов.