Новый 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()
таким образом?