Путаница по поводу виртуальных подклассов при проверке статического типа, например mypyPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Путаница по поводу виртуальных подклассов при проверке статического типа, например mypy

Сообщение Anonymous »

Я пытаюсь выяснить в Python, пройдет ли виртуальный подкласс проверку статического типа, как mypy. И я читал об этом на свободном Python:

Виртуальные подклассы не наследуются от своих зарегистрированных ABC и
не проверяются на соответствие ABC. интерфейс в любое время,
даже при их создании. Кроме того, средства проверки статических типов в настоящее время не могут
обрабатывать виртуальные подклассы. Подробности см. в разделе Mypy Issue
2922 — поддержка ABCMeta.register.

Похоже, что mypy не поддерживает виртуальный класс, созданный с помощью Register< /code> или __subclasshool__. Чтобы проверить это, я написал следующий код и получил запутанный результат:

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

from collections import abc

class SequenceLike:
def __init__(self, lst):
self._list = list(lst)

def __getitem__(self, index):
return self._list[index]

def __len__(self):
return len(self._list)

def __contains__(self, object):
return object in self._list

def __iter__(self):
return iter(self._list)

def checkSized(a: abc.Sized):
pass

def checkSequence(a: abc.Sequence[int]):
pass

def checkContainer(a: abc.Container):
pass

def checkIterable(a: abc.Iterable):
pass

abc.Sequence.register(SequenceLike)

checkSized(SequenceLike([]))
checkContainer(SequenceLike([1, 2]))
checkIterable(SequenceLike([]))
checkSequence(SequenceLike([1, 2, 3])) # mypy error: Argument 1 to "checkSequence" has incompatible type "SequenceLike"; expected "Sequence[int]"  [arg-type]
Итак, мой вопрос: почему вызовы checkSized(SequenceLike([])), checkContainer(SequenceLike([1, 2])) и checkIterable(SequenceLike([])) не вызывают никаких ошибок mypy, поскольку класс SequenceLike фактически является виртуальным подклассом Sized, Container и Итерируемый?
Я ценю любую помощь или предложения. Спасибо!
Пс. Английский — мой второй язык, поэтому прошу прощения за ошибки в моем вопросе.

Подробнее здесь: https://stackoverflow.com/questions/783 ... -like-mypy
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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