Проблема в том, что у меня есть две разные «базы» модели для каждой коллекции. Модель с редактируемыми полями (например, 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