Virtuelle Unterklassen erben nicht von ihren registrierten ABCs und
werden nicht auf Konformität mit dem ABC überprüft Schnittstelle jederzeit,
nicht einmal, wenn sie instanziiert werden. Außerdem können statische Typprüfer derzeit keine virtuellen Unterklassen verarbeiten. Einzelheiten finden Sie unter Mypy-Problem
2922 – ABCMeta.register-Unterstützung.
Es scheint, dass Mypy keine mit Register erstellte virtuelle Klasse unterstützt< /code> oder __subclasshool__. Ich habe den folgenden Code geschrieben, um dies zu testen, und bin auf ein verwirrendes Ergebnis gestoßen:
Code: Select all
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]
Ich freue mich über jede Hilfe oder Anregung. Vielen Dank!
Ps. Englisch ist meine zweite Sprache. Bitte entschuldigen Sie etwaige Fehler in meiner Frage.