Что такое абстрактные классы в Python и для чего они нужны?

Ответ

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

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

Для создания используется модуль abc.

Ключевые элементы:

  • ABC: Метакласс, который делает класс абстрактным.
  • @abstractmethod: Декоратор, помечающий метод как абстрактный. Дочерний класс обязан переопределить этот метод.

Пример

from abc import ABC, abstractmethod

# Абстрактный класс, определяющий интерфейс для всех "транспортных средств"
class Vehicle(ABC):
    @abstractmethod
    def move(self):
        """Этот метод должен быть реализован в каждом подклассе."""
        pass

# Конкретная реализация
class Car(Vehicle):
    def move(self):
        return "Car is driving on the road."

class Boat(Vehicle):
    def move(self):
        return "Boat is sailing on the water."

# Попытка создать экземпляр абстрактного класса вызовет ошибку
# vehicle = Vehicle()  # TypeError: Can't instantiate abstract class Vehicle with abstract method move

# Экземпляры дочерних классов создаются без проблем
car = Car()
print(car.move())  # -> "Car is driving on the road."

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