Код: Выделить всё
from pydantic import BaseModel
from typing import TypeVar
class Shape(BaseModel):
name: str
class Circle(Shape):
diameter: float
class Square(Shape):
side: float
class Triangle(Shape):
base: float
height: float
T = TypeVar("T")
def generate_shapes(shapes: list[type[T]]) -> list[T]:
generated_shapes = []
for shape in shapes:
if shape == Circle:
generated_shapes.append(Circle(name=shape.__name__, diameter=10))
elif shape == Square:
generated_shapes.append(Square(name=shape.__name__, side=10))
elif shape == Triangle:
generated_shapes.append(Triangle(name=shape.__name__, base=10, height=10))
return generated_shapes
if __name__ == "__main__":
result = generate_shapes([Circle, Triangle])
Аргумент 1 для "generate_shapes" имеет несовместимый тип
"list[ModelMetaclass]"; ожидается "list[type[Never]]"
Моей целью было бы иметь возможность определить тип выходного списка на основе входных данных. Похоже, что с помощью этой аннотации vscode способен это понять:


Я понимаю, что mypy жалуется, потому что списки изменяемы и не могут быть ковариантными. . Итак, я боюсь, что нет выхода для того, чего я пытаюсь достичь (вывод vscode + mypy счастлив)?
Подробнее здесь: https://stackoverflow.com/questions/790 ... input-para