Код: Выделить всё
from collections.abc import AsyncIterable
class Chunk: ...
class Foo[Dlt: Chunk | str]:
def run(self) -> AsyncIterable[Chunk]: ...
def process(self) -> AsyncIterable[Dlt]:
return self.run() # ReturnType Error
Код: Выделить всё
Expression of type "AsyncIterable[Chunk]" cannot be assigned to the return type "AsyncIterable[Dlt@Foo]"
"AsyncIterable[Chunk]" is incompatible with "AsyncIterable[Dlt@Foo]"
Type variable "_T_co@AsyncIterable" is covariant, so "Chunk" cannot be assigned to "Dlt@Foo"
Type "Chunk" cannot be assigned to type "Dlt@Foo" Pylance(reportReturnType)
< /code>
Что я пробовал: < /h3>
Чтобы решить проблему, я попробовал следующие подходы, но ни один из них не разрешил ошибку: < /p>
Изменить ограничение на один, например, класс. /> Переписывание универсального параметра с использованием typevar < /code> вместо синтаксиса PEP 695. < /li>
С синтаксисом typevar < /code>:
Включение ковариации или контрапроворицы для Dlt < /code>. Chunk | Вопросы: < /h3>
Почему Pylance выражает эту ошибку, даже если dlt < /code> ограничен Chunk | str
Любые идеи, объяснения или альтернативные подходы высоко ценится! < /p>
Подробнее здесь: https://stackoverflow.com/questions/797 ... onstraints