Ответ
В Python концепция интерфейсов реализуется через абстрактные базовые классы (Abstract Base Classes, ABC) из модуля abc
.
Они определяют «контракт» — набор методов, которые должен реализовать любой класс-наследник. Это позволяет вводить строгие правила в систему с динамической типизацией.
Основная цель — обеспечить полиморфизм и гарантировать, что объект имеет определённое поведение, не полагаясь только на «утиную типизацию».
Пример:
from abc import ABC, abstractmethod
# Определение интерфейса
class Serializable(ABC):
@abstractmethod
def serialize(self) -> str:
"""Сериализует объект в строку."""
pass
# Конкретная реализация
class UserData(Serializable):
def __init__(self, name: str, email: str):
self.name = name
self.email = email
def serialize(self) -> str:
import json
return json.dumps({"name": self.name, "email": self.email})
# Попытка создать класс без реализации метода вызовет TypeError
# class BrokenData(Serializable):
# pass
# b = BrokenData() # -> TypeError: Can't instantiate abstract class ...
Когда использовать:
- В больших проектах и фреймворках: для явного определения API и точек расширения (плагинов).
- При работе в команде: чтобы гарантировать, что разные части системы будут совместимы.
- Для проверки типов: статические анализаторы, такие как
mypy
, используют ABC для более строгой проверки кода.