«Протоколы нельзя использовать с 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()
в этом случае?