Код: Выделить всё
from typing import TypeVar, reveal_type
# Missing type parameters for generic type "list" [type-arg]
F = TypeVar("F", bound="Foo[list]")
U = TypeVar("U")
class Foo[T]:
def __init__(self, value: T) -> None:
self.value = value
def get_value(self) -> T:
return self.value
@classmethod
def join(cls: type[F], foos: list[Foo[U]]) -> F:
return cls([f.value for f in foos])
class Bar[T](Foo[T]):
...
# Correctly revealed as `Bar[list[int]]`
reveal_type(Bar[list[int]].join([Bar(1), Bar(2)]))
Есть ли лучший способ получить правильные аннотации типов, сохраняя при этом поддержку подклассов? Можно ли связать тип cls с использованием тех же переменных TypeVar, что и аргумент foos (т. е. использовать U TypeVar), избегая необходимости указывать Bar[list[int]]. ?
Подробнее здесь: https://stackoverflow.com/questions/793 ... lassmethod
Мобильная версия