Объявление протокола в ООП в Python
Протокол представляет собой описание публичных методов, которые должен иметь объект. Код методов в протоколе не пишут - только имена и параметры.
Протоколы объявляют как класс с наследованием
от Protocol. Импорт делают из
typing:
from typing import Protocol
Для наследования от протокола в смысле типов говорят иначе: класс не обязан писать протокол в скобках. Достаточно реализовать те же методы. Сам протокол служит описанием контракта.
Нельзя использовать протокол как обычный класс с данными. Объект протокола не создают - в нем нет рабочей реализации методов.
У протокола могут быть только описания
методов. Свойства задают через декоратор
property в теле протокола, если
нужен доступ без скобок.
Давайте опишем протокол пользователя с методами имени и возраста:
class UserProto(Protocol):
def name(self) -> str:
...
def age(self) -> int:
...
Тело метода заменяют на ....
Это значит: здесь должна быть реализация
у подходящего класса, а не в протоколе.
Сделаем класс User с теми же
методами:
class User:
def __init__(self, name, age):
self.__name = name
self.__age = age
def name(self):
return self.__name
def age(self):
return self.__age
Такой User подходит под
UserProto для аннотаций и
проверки типов, хотя в объявлении
класса протокол не указан.
Объявите протокол EmployeeProto
с методами name и salary.
Сделайте класс Employee с
методами из протокола EmployeeProto.