"Protocols cannot be used with isinstance()" - why not? : <p>The new <code>typing</code> module contains several objects with names like "SupportsInt" (-Float, -Bytes, etc.). The name, and the descriptions on <a href="https://docs.python.org/3/library/typing.html">the documentation page for the module</a>, might be read to suggest that you can test whether an object is of a type that "supports <code>__int__()</code>". But if you try to use <code>isinstance()</code>, it gives a response that makes it clear that that isn't something you are meant to do:</p>

<pre><code>&gt;&gt;&gt; isinstance(5, typing.SupportsInt)
(Traceback omitted)
TypeError: Protocols cannot be used with isinstance().
</code></pre>

<p>On the other hand, you can use <code>issubclass()</code>:</p>

<pre><code>&gt;&gt;&gt; issubclass((5).__class__, typing.SupportsInt)
True
&gt;&gt;&gt; issubclass(type(5), typing.SupportsInt)
True
</code></pre>

<p>What is a "protocol" in this context? Why does it disallow the use of <code>isinstance()</code> in this way?</p>
