Ответ
Абстрактный класс (Abstract Base Class, ABC) в Python — это класс, который не может иметь экземпляров и предназначен для использования в качестве базового класса (шаблона) для других классов.
Он определяет контракт: набор методов и свойств, которые должны быть реализованы во всех дочерних классах. Это обеспечивает единый и предсказуемый интерфейс для группы связанных классов.
Ключевые цели использования:
- Определение интерфейса: Гарантирует, что все подклассы будут иметь определённую структуру и функциональность.
- Предотвращение инстанцирования: Запрещает создание объектов базового класса, который сам по себе не имеет полной реализации.
- Повторное использование кода: Общая для всех подклассов логика может быть реализована в абстрактном классе, а специфичная — в дочерних.
Для создания абстрактных классов в 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 плывет по воде.
Таким образом, абстрактные классы являются мощным инструментом для построения надежных и расширяемых иерархий классов.