Параметры методов протокола в ООП в Python
При описании методов в протоколах необходимо указывать не только имена самих методов, но и принимаемые ими параметры.
Давайте посмотрим на примере. Пусть у нас
дан протокол MathProto, описывающий
класс для математических операций сложения,
вычитания, умножения и деления:
from typing import Protocol
class MathProto(Protocol):
def sum(self):
...
def subtract(self):
...
def multiply(self):
...
def divide(self):
...
Сейчас методы протокола не принимают никаких параметров. Класс с такими же методами без параметров подойдет, а с лишними аргументами - уже нет для проверки типов.
Давайте укажем параметры методов в протоколе:
class MathProto(Protocol):
def sum(self, a, b):
...
def subtract(self, a, b):
...
def multiply(self, a, b):
...
def divide(self, a, b):
...
Напишем реализацию с теми же сигнатурами:
class Math:
def sum(self, a, b):
return a + b
def subtract(self, a, b):
return a - b
def multiply(self, a, b):
return a * b
def divide(self, a, b):
return a / b
Если в классе задать другое количество параметров, статическая проверка типов покажет ошибку. Так мы не сможем ни случайно забыть параметр, ни добавить лишний.
Дан протокол UserProto:
class UserProto(Protocol):
def set_name(self, name):
...
def get_name(self):
...
def set_age(self, age):
...
def get_age(self):
...
Сделайте класс User, который
подходит под данный протокол.
Сделайте протокол EmployeeProto
с методами set_name, get_name,
set_salary, get_salary
и параметрами как в протоколе UserProto.