Наследование протоколов в ООП в Python
Протоколы, так же, как и классы, могут наследовать друг от друга. Дочерний протокол включает методы родительского и добавляет свои.
Пусть есть протокол фигуры с методами площади и периметра:
from typing import Protocol
class FigureProto(Protocol):
def get_square(self) -> float:
...
def get_perimeter(self) -> float:
...
Пусть также есть протокол прямоугольника с конструктором по двум сторонам:
class RectangleProto(FigureProto, Protocol):
def __init__(self, a, b):
...
RectangleProto наследует методы
FigureProto. Класс с __init__,
get_square и get_perimeter
подходит под оба протокола.
Сделаем протоколы для пользователя и сотрудника по тому же принципу:
class UserProto(Protocol):
def get_name(self) -> str:
...
def set_name(self, name) -> None:
...
def get_age(self) -> int:
...
def set_age(self, age) -> None:
...
class EmployeeProto(UserProto, Protocol):
def get_salary(self) -> int:
...
def set_salary(self, salary) -> None:
...
Класс Employee с шестью методами
подходит под EmployeeProto и
автоматически под UserProto:
class Employee:
def __init__(self, name, age, salary):
self.__name = name
self.__age = age
self.__salary = salary
def get_name(self):
return self.__name
def set_name(self, name):
self.__name = name
def get_age(self):
return self.__age
def set_age(self, age):
self.__age = age
def get_salary(self):
return self.__salary
def set_salary(self, salary):
self.__salary = salary
Сделайте протокол UserProto
с методами get_name, set_name,
get_age, set_age.
Сделайте протокол EmployeeProto,
наследующий UserProto, с методами
get_salary и set_salary.
Сделайте класс Employee,
подходящий под EmployeeProto.