У меня mypy 1.10.0 и pydantic 2.7.0.
Вот воспроизводимый пример моего варианта использования:
Код: Выделить всё
from typing import Iterator, Type, TypeVar, Union
from pydantic import BaseModel, TypeAdapter
class A(BaseModel):
x: int
class B(BaseModel):
y: int
T = TypeVar("T", bound=BaseModel)
class Loader:
def load_models(self, model_class: Type[T]) -> Iterator[T]:
# logic to load models
my_dict = {"x": 1} # fake data for testing
yield TypeAdapter(model_class).validate_python(my_dict)
my_dict = {"y": 2} # fake data for testing
yield TypeAdapter(model_class).validate_python(my_dict)
ModelAOrB = A | B
print(list(Loader().load_models(ModelAOrB)))
Подробнее здесь: https://stackoverflow.com/questions/783 ... pe-instead