Pythoner
Фотография
✈️Protocol из модуля typing позволяет определить интерфейс, который должен реализовывать класс. Это полезно для проверки соответствия объектов определённым методам и атрибутам, что делает код более гибким и понятным.
➡️Когда применять Protocol?
- Динамическая типизация: Если вы хотите задать контракт для классов без явного указания на наследование.
- Гибкость: Позволяет различным классам предоставлять свою реализацию методов, сохраняя общий интерфейс.
- Улучшение читаемости: Помогает лучше понять как должны взаимодействовать различные части кода.
➡️Пример использования Protocol:
from typing import Protocol
# Определяем протокол
class Movable(Protocol):
def move(self) -> None:
...
# Класс, реализующий этот протокол
class Car:
def move(self) -> None:
print("Car is moving")
class Bird:
def move(self) -> None:
print("Bird is flying")
def drive(vehicle: Movable) -> None:
vehicle.move()
# Используем
car = Car()
bird = Bird()
drive(car) # Output: Car is moving
drive(bird) # Output: Bird is flying
💡Заключение
Protocol — мощный инструмент для задания интерфейсов в Python. Он обеспечивает гибкость и улучшает структуру вашего кода. Используйте его, когда нужно задать контракты для различных классов без строгой иерархии наследования.
🐍 Pythoner
17 · 1.7K ·