Что такое интерфейс в ООП и как он реализуется в Python

Ответ

Интерфейс в ООП — это контракт, который определяет набор методов, которые должен реализовать класс, не указывая, как именно он их реализует. Это позволяет обеспечить полиморфизм и слабую связность компонентов системы.

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

Ключевые цели:

  • Определение контракта: Гарантирует, что все классы-наследники будут иметь одинаковый набор методов.
  • Полиморфизм: Позволяет работать с разными объектами через единый интерфейс.
  • Проверка типов: Можно использовать isinstance() для проверки, реализует ли класс определённый интерфейс.

Пример:

from abc import ABC, abstractmethod

# 1. Определяем интерфейс (абстрактный класс)
class Serializable(ABC):
    @abstractmethod
    def to_json(self):
        """Возвращает JSON-представление объекта."""
        pass

# 2. Реализуем интерфейс в конкретных классах
class User(Serializable):
    def __init__(self, name, email):
        self.name = name
        self.email = email

    def to_json(self):
        return f'{{"name": "{self.name}", "email": "{self.email}"}}'

class Product(Serializable):
    def __init__(self, title, price):
        self.title = title
        self.price = price

    def to_json(self):
        return f'{{"title": "{self.title}", "price": {self.price}}}'

# Попытка создать экземпляр класса, не реализовавшего метод, вызовет TypeError
# class Broken(Serializable):
#     pass
# b = Broken() # -> TypeError: Can't instantiate abstract class Broken with abstract method to_json

Таким образом, abc позволяет создавать строгие контракты, которым должны следовать дочерние классы.