«Протоколы нельзя использовать с isinstance ()» - почему бы и нет?

Новыйtyping Модуль содержит несколько объектов с такими именами, как «SupportsInt» (-Float, -Bytes и т. д.). Название и описания настраница документации для модуля, можно прочитать, чтобы предположить, что вы можете проверить, является ли объект типа, который "поддерживает__int__()". Но если вы попытаетесь использоватьisinstance(), он дает ответ, который дает понять, что это не то, что вы должны делать:

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

С другой стороны, вы можете использоватьissubclass():

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

Что такое «протокол» в этом контексте? Почему это запрещает использованиеisinstance() в этом случае?

Ответы на вопрос(0)

Ваш ответ на вопрос