Аннотации типов Python: метод подкласса с аннотацией, ссылающейся на подкласс супераннотации.Python

Программы на Python
Anonymous
Аннотации типов Python: метод подкласса с аннотацией, ссылающейся на подкласс супераннотации.

Сообщение Anonymous »

У меня два класса

Код: Выделить всё

class A:
...

class B(A):
...
У меня есть еще два класса, которые используют их

Код: Выделить всё

class C:
def foo(self) -> list[type[A]]: ...

class D(C):
def foo(self) -> list[type[B]]: ...
Это выдает ошибку подсказки типа, жалуясь, что аннотация D.foo несовместима с C.foo. Необходимо, чтобы D.foo заявил, что возвращает список B, поскольку B содержит некоторые атрибуты, не обязательно принадлежащие A.
Я читал о ковариантности и контравариантности в Python, и мне показалось, что определение ковариантного типа следующим образом может помочь решить проблему

Код: Выделить всё

T = TypeVar('T', bound=A, covariant=True)

class C:
def foo(self) -> list[T]: ...

class D(C):
def foo(self) -> list[type[B]]: ...
Однако проблема остается — mypy по-прежнему жалуется, что D.foo несовместим с C.foo.
Кто-нибудь знает способ решить эту проблему?

Подробнее здесь: https://stackoverflow.com/questions/771 ... ubclass-of

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