Ответ
Абстрактный базовый класс (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 позволяют работать с разными дочерними классами через единый интерфейс, определённый в родительском классе.