Виртуальные подклассы не наследуются от своих зарегистрированных 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]
Я ценю любую помощь или предложения. Спасибо!
Пс. Английский — мой второй язык, поэтому прошу прощения за ошибки в моем вопросе.
Подробнее здесь: https://stackoverflow.com/questions/783 ... -like-mypy