Junior
16
В Python нет интерфейсов как в Java. Что можно использовать для описания контрактов между компонентами приложения?
Companies where asked
Почтатех
Answer from AI
sobes.tech AI
В Python отсутствует встроенный механизм интерфейсов, как в Java, но для описания контрактов между компонентами можно использовать несколько подходов:
- Абстрактные базовые классы (ABC) из модуля
abc. Они позволяют определить методы, которые должны быть реализованы в подклассах.
from abc import ABC, abstractmethod
class MyInterface(ABC):
@abstractmethod
def do_something(self):
pass
class Implementation(MyInterface):
def do_something(self):
print("Выполнение")
- Протоколы (Protocols) из модуля
typing(начиная с Python 3.8). Это более гибкий способ описания интерфейсов, основанный на структурной типизации.
from typing import Protocol
class MyProtocol(Protocol):
def do_something(self) -> None:
...
class Implementation:
def do_something(self) -> None:
print("Выполнение")
- Документирование и соглашения — в динамически типизированных языках часто достаточно договориться о методах и их поведении.
Таким образом, для описания контрактов в Python чаще всего применяют ABC или Protocols, что позволяет обеспечить проверку на уровне типов и структуру кода.