Код: Выделить всё
from typing import Protocol, override
from dataclasses import dataclass
# Definition of protocols (usually in a separate file)
@dataclass
class Data(Protocol):
val: int = 1
class Programm(Protocol):
def update(self, data: Data) -> int: ...
# Concrete implementation of the protocols:
@dataclass
class DataA(Data):
val_concrete: int = 2
class ProgrammA(Programm):
@override
def update(self, data: DataA) -> int:
return data.val_concrete + data.val
< /code>
Я был уверен, что это правильный способ использовать протоколы. Может, я ошибаюсь. Когда я включаю пирайт (на самом деле я использую основополагающий пирог, но я должен быть таким же), он отмечает Programma.update ()
[reportincompatiblemethodoverride]: метод «Обновление» класс «Программа» в неспособном манере
Я могу обойти это, используя избыточный родовой. Но я думаю, что это ненужно и в некотором роде просто неправильно.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... -protocols