Как набрать намек на метод Python Factory, возвращающий разные типы?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как набрать намек на метод Python Factory, возвращающий разные типы?

Сообщение Anonymous »

Я работаю над общей структурой с целью решения разных, но связанных проблем. Проблема состоит из данных и множества алгоритмов, работающих на этих данных. Данные и алгоритмы могут варьироваться от проблемы к проблеме, поэтому мне нужны разные классы. Но все они имеют общий интерфейс. В какой -то момент в моей программе мне нужна функция/метод, который возвращает экземпляры разных классов в зависимости от значения (не типа) параметра.

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

from dataclasses import dataclass
from typing import Protocol

# Protocols
class BaseData(Protocol):
common: int

class BaseAlg[D: BaseData](Protocol):
def update(self, data: D) -> None: ...

# Implementations data
@dataclass
class Data1:
common: int
extra: int

@dataclass
class Data2:
common: int
extra: str

# Implementations algorithms
class Alg1:
def update(self, data: Data1) -> None:
data.extra += data.common

class Alg2a:
def update(self, data: Data2) -> None:
data.extra *= data.common

class Alg2b:
def update(self, data: Data2) -> None:
data.extra += "2b"
< /code>
Нет, я хочу заводскую инициализацию алгоритмов и данных (опущенные здесь) для каждой проблемы. < /p>
class FactoryAlgorithms:

def _create_1(self) -> list[BaseAlg[Data1]]:
return [Alg1()]

def _create_2(self) -> list[BaseAlg[Data2]]:
return [Alg2a(), Alg2b()]

def create(self, type_alg: int): # Intuitively I would write list[BaseAlg[BaseData]] which is rejected by mypy, I guess for covariance/contravariance reasons:
Incompatible return value type (got "list[BaseAlg[Data1]]", expected "list[BaseAlg[BaseData]]")
Is there way to tackle this with дженерики? Или этот дизайн принципиально ошибочен?  

Подробнее здесь: [url]https://stackoverflow.com/questions/79692625/how-to-type-hint-a-python-factory-method-returning-different-types[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Factory-boy: используйте параметры в поле Factory.List
    Anonymous » » в форуме Python
    0 Ответы
    54 Просмотры
    Последнее сообщение Anonymous
  • Нечеткий поиск слов в HTML-файле, возвращающий разные результаты
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • GSON Converter Factory MOROFIT2. Различные типы в сериализации/десериализации
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • GSON Converter Factory MOROFIT2. Различные типы в сериализации/десериализации
    Anonymous » » в форуме Php
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • HttpClient PostAsync, возвращающий метод 405, не разрешен
    Гость » » в форуме C#
    0 Ответы
    63 Просмотры
    Последнее сообщение Гость

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