Что такое абстрактный базовый класс (ABC) в Python?

Ответ

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

Для их создания используется модуль abc и декоратор @abstractmethod.

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

Пример:

from abc import ABC, abstractmethod

# Создаем абстрактный класс, наследуясь от ABC
class Shape(ABC):
    @abstractmethod  # Помечаем метод как обязательный для реализации
    def area(self):
        pass

    @abstractmethod
    def perimeter(self):
        pass

# Конкретный класс, реализующий контракт
class Square(Shape):
    def __init__(self, side):
        self.side = side

    def area(self):
        return self.side * self.side

    def perimeter(self):
        return 4 * self.side

# Попытка создать экземпляр абстрактного класса вызовет ошибку
# shape = Shape()  # TypeError: Can't instantiate abstract class Shape with abstract methods area, perimeter

# Экземпляр дочернего класса создается успешно
square = Square(5)
print(f"Площадь: {square.area()}")        # Вывод: Площадь: 25
print(f"Периметр: {square.perimeter()}")  # Вывод: Периметр: 20

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

  • Гарантия контракта: Попытка создать экземпляр дочернего класса (например, Square) без реализации всех абстрактных методов (area и perimeter) вызовет TypeError.
  • Запрет на создание экземпляров: Нельзя создать объект самого абстрактного класса.
  • Поддержка полиморфизма: ABC позволяют работать с разными дочерними классами через единый интерфейс, определённый в родительском классе.