Verwirrung über virtuelle Unterklassen bei der statischen Typprüfung wie MypyPython

Python-Programme
Guest
 Verwirrung über virtuelle Unterklassen bei der statischen Typprüfung wie Mypy

Post by Guest »

Ich versuche in Python herauszufinden, ob die virtuelle Unterklasse die statische Typprüfung wie Mypy besteht. Und ich habe darüber in Fluent Python gelesen:

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]
Meine Frage ist also, warum die Aufrufe von checkSized(SequenceLike([])), checkContainer(SequenceLike([1, 2])) erfolgen und checkIterable(SequenceLike([])) lösen keine Mypy-Fehler aus, da die Klasse SequenceLike praktisch eine virtuelle Unterklasse von Sized, Container ist. und iterierbar?
Ich freue mich über jede Hilfe oder Anregung. Vielen Dank!
Ps. Englisch ist meine zweite Sprache. Bitte entschuldigen Sie etwaige Fehler in meiner Frage.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post