Как формализовать повторяющиеся отношения между непересекающимися группами классов в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как формализовать повторяющиеся отношения между непересекающимися группами классов в Python?

Сообщение Anonymous »

У меня есть код Python, имеющий следующую форму:

Код: Выделить всё

from dataclasses import dataclass

@dataclass
class Foo_Data:
foo: int

class Foo_Processor:
def process(self, data: Foo_Data): ...

class Foo_Loader:
def load(self, file_path: str) -> Foo_Data: ...

#----------------------------------------------------------------

@dataclass
class Bar_Data:
bar: str

class Bar_Processor:
def process(self, data: Bar_Data): ...

class Bar_Loader:
def load(self, file_path: str) -> Bar_Data: ...
У меня есть несколько экземпляров такой настройки данных/процессора/загрузчика, и все классы имеют одинаковые сигнатуры методов по модулю конкретного семейства классов (Foo, Bar и т. д.). Существует ли питонический способ формализации этих отношений между классами, чтобы обеспечить аналогичную структуру, если я решу создать семейство классов Spam_Data, Spam_Processor и Spam_Loader? Например, мне нужно что-то, обеспечивающее, чтобы Spam_Processor имел метод процесса, который принимает аргумент типа Spam_Data. Есть ли способ каким-то образом добиться этой стандартизации с помощью абстрактных классов, универсальных типов или какой-либо другой структуры?
Я пробовал использовать абстрактные классы, но mypy правильно указывает, что все классы *_Data должны быть подклассы абстрактного класса Data, а также то, что все классы *_Processor являются подклассами абстрактного класса Processor, нарушает принцип подстановки Лискова, поскольку каждый процессор предназначен только для своего соответствующего класса Data (т. е. Foo_Processor< /code> не может обрабатывать Bar_Data, но можно было бы ожидать, что это возможно, если у этих классов есть суперклассы Processor и Data, которые совместимы таким образом).

Подробнее здесь: https://stackoverflow.com/questions/789 ... asses-in-p
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»