Как в Python реализовать интерфейс или абстрактный класс

«Как в Python реализовать интерфейс или абстрактный класс» — вопрос из категории ООП, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Абстрактный класс — это класс, который не может иметь экземпляров и предназначен для наследования. Он определяет "контракт": набор методов, которые должны быть реализованы в дочерних классах.

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

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

Пример

Создадим интерфейс Transport, который требует реализации метода move().

from abc import ABC, abstractmethod

# 1. Определяем абстрактный класс (интерфейс)
class Transport(ABC):

    @abstractmethod
    def move(self):
        """Этот метод должен быть реализован всеми подклассами."""
        pass

# 2. Реализуем интерфейс в конкретных классах
class Car(Transport):
    def move(self):
        print("Автомобиль едет по дороге")

class Boat(Transport):
    def move(self):
        print("Лодка плывет по воде")

# 3. Использование
car = Car()
boat = Boat()

car.move()  # Вывод: Автомобиль едет по дороге
boat.move() # Вывод: Лодка плывет по воде

# Попытка создать экземпляр без реализации метода вызовет ошибку
try:
    class Plane(Transport):
        pass
    cessna = Plane()
except TypeError as e:
    print(f"nОшибка: {e}")
    # Вывод: Ошибка: Can't instantiate abstract class Plane with abstract method move

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