"Protokolle können nicht mit isinstance () verwendet werden" - warum nicht?

Das neuetypingas @ -Modul enthält mehrere Objekte mit Namen wie "SupportsInt" (-Float, -Bytes, etc.). Der Name und die Beschreibungen aufdie Dokumentationsseite für das Modul, könnte gelesen werden, um vorzuschlagen, dass Sie testen können, ob ein Objekt von einem Typ ist, der @ unterstütz__int__() ". Aber wenn Sie versuchen, @ zu verwendisinstance(), es gibt eine Antwort, die verdeutlicht, dass Sie das nicht tun sollen:

>>> isinstance(5, typing.SupportsInt)
(Traceback omitted)
TypeError: Protocols cannot be used with isinstance().

uf der anderen Seite können Sie @ verwendissubclass():

>>> issubclass((5).__class__, typing.SupportsInt)
True
>>> issubclass(type(5), typing.SupportsInt)
True

Was ist in diesem Zusammenhang ein "Protokoll"? Warum ist die Verwendung von @ nicht zulässiisinstance() auf diese Weise

Antworten auf die Frage(4)

Ihre Antwort auf die Frage