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

Протокол с параметром типа в ООП в Python

Протокол описывает, какие методы должен иметь объект, без наследования от общего базового класса. Протокол тоже может быть обобщённым.

Объявим протокол Named с параметром T и методом get, возвращающим T:

from typing import Protocol class Named[T](Protocol): def get(self) -> T: ...

Любой класс с подходящим методом get считается совместимым, даже если он не наследует протокол:

class Employee: def __init__(self, name): self.name = name def get(self): return self.name

Напишем функцию, которая принимает объект по протоколу Named:

def read_name(obj: Named[str]) -> str: return obj.get() emp = Employee('john') print(read_name(emp)) # выведет 'john'

Employee не упоминает протокол, но у него есть метод get с нужной сигнатурой, поэтому объект подходит для функции read_name.

Сделайте протокол SizedValue[T] с методом read, возвращающим T. Сделайте класс Product с методом read и проверьте передачу в функцию по протоколу.

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