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

Ответ

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

Почему это важно? Абстрактные классы используются для:

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

Для создания абстрактных классов в Python используется встроенный модуль abc (Abstract Base Classes). Ключевые компоненты:

  • ABC: Базовый класс, от которого должны наследоваться абстрактные классы.
  • @abstractmethod: Декоратор, помечающий метод как абстрактный. Такие методы не имеют реализации в абстрактном классе и должны быть переопределены в подклассах.

Пример:

from abc import ABC, abstractmethod

class Animal(ABC): # Наследуемся от ABC
    @abstractmethod
    def make_sound(self):
        """Абстрактный метод: каждый потомок должен реализовать свой звук."""
        pass

class Dog(Animal):
    def make_sound(self):
        return "Woof!"

# animal = Animal() # TypeError: Can't instantiate abstract class Animal with abstract method make_sound

dog = Dog()
print(f"Dog sound: {dog.make_sound()}") # Вывод: Dog sound: Woof!