Аннотации типов 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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