Как создать универсальный тип, связанный с другим универсальным типом и «интерфейсом»?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как создать универсальный тип, связанный с другим универсальным типом и «интерфейсом»?

Сообщение Anonymous »

Я хочу написать типизированный класс BaseCollection для уровня базы данных, который затем планирую создать подкласс для конкретных коллекций, например, для UserCollection. Цель состоит в том, чтобы а) иметь стандартизированный интерфейс и реализовать общие методы, такие как get(), которые можно использовать для всех коллекций.
Проблема в том, что у меня есть две разные «базы» модели для каждой коллекции. Модель с редактируемыми полями (например, UserBase) и модель БД с полями, которыми управляет база данных в дополнение к редактируемым полям (например, UserInDB). Итак, для BaseCollection у меня есть два общих типа: тип ввода (IT) и тип возврата (RT). Здесь RT расширяет ИТ дополнительными областями. Итак, я хотел бы написать что-то вроде этого:
from abc import ABC
from typing import Generic, Type, TypeVar

from pydantic import BaseModel
from models import UserBase, UserInDB

class ModelInDB:
id: str
# ...

IT = TypeVar("IT", bound=BaseModel)

class BaseCollection(ABC, Generic[IT]):
RT = ??? # Somehow derive gernic RT from IT with bound=(IT, ModelInDB)
model: Type[RT] = None

def create(self, data: IT) -> RT:
data = ... # generic implementation here
return self.model(**data)

def get(self, id: str) -> RT
data = ... # generic implementation here
return self.model(**data)

class UserCollection(BaseCollection[UserBase]):
model = User

# now it's time to harvest fruits and use my typed user collection :)


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

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

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

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

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

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

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