Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpPtDc 138 of 174 menu
◀ ▶

Объявление протокола в ООП в 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.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить