Pylance не позволяет структурировать подтипы со встроенными типамиPython

Программы на Python
Ответить
Anonymous
 Pylance не позволяет структурировать подтипы со встроенными типами

Сообщение Anonymous »

Я читаю документ о протоколах и застрял с сообщением об ошибке Pylance.
https://peps.python.org/pep-0544/#subty ... ther-types
Упрощая код в этом разделе, я написал код

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

from typing import Protocol, TypeVar

T = TypeVar("T", contravariant=True)
class ListLike(Protocol[T]):
def append(self, x: T) -> None:
...

class MockStack:
def append(self, x: int) -> None:
...

def populate(lst: ListLike[int]) -> int:
...

populate([1, 2, 3])
populate(MockStack())
Я ожидаю, что этот фрагмент пройдет проверку типа, поскольку [1, 2, 3] (как list[int]) и MockStack() (как и MockStack) оба имеют метод add(self, x: int) и, следовательно, являются структурными подтипами ListLike[int].
Но pylance в VS Code повышает сообщение об ошибке:

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

Argument of type "list[int]" cannot be assigned to parameter "lst" of type "ListLike[int]" in function "populate"
"list[int]" is incompatible with protocol "ListLike[int]"
"append" is an incompatible type
Type "(__object: int, /) -> None" cannot be assigned to type "(x: T@ListLike) -> None"
Position-only parameter mismatch; expected 1 but received 0  (reportGeneralTypeIssues)
Может ли кто-нибудь дать мне совет, как обойти эту проблему?
среда: Apple M1 Pro, mac OS 13.5.1
Версия кода VS: 1.84.2 версия: v2023.11.10

Подробнее здесь: https://stackoverflow.com/questions/774 ... t-in-types
Ответить

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

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

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

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

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