-
-
Notifications
You must be signed in to change notification settings - Fork 30.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Strange interaction between typing.Protocol
and unrelated isinstance()
checks
#105144
Comments
This bisects to b27fe67 |
typing._BaseGenericAlias
and typing.Protocol
typing._BaseGenericAlias
and typing.Protocol
with isinstance()
checks
typing._BaseGenericAlias
and typing.Protocol
with isinstance()
checkstyping.Protocol
and unrelated isinstance()
checks
Also reproduces if you use >>> import collections.abc
>>> import typing
>>> class Foo(collections.abc.Sized, typing.Protocol): pass
...
>>> isinstance(1, collections.abc.Sized)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\alexw\coding\cpython\Lib\abc.py", line 119, in __instancecheck__
return _abc_instancecheck(cls, instance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\alexw\coding\cpython\Lib\abc.py", line 123, in __subclasscheck__
return _abc_subclasscheck(cls, subclass)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\alexw\coding\cpython\Lib\typing.py", line 1796, in __subclasscheck__
return super().__subclasscheck__(other)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\alexw\coding\cpython\Lib\abc.py", line 123, in __subclasscheck__
return _abc_subclasscheck(cls, subclass)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\alexw\coding\cpython\Lib\typing.py", line 1879, in _proto_hook
raise TypeError("Instance and class checks can only be used with"
TypeError: Instance and class checks can only be used with @runtime_checkable protocols |
…asses A more invasive solution for python#105144; perhaps better kept for 3.13 only.
…_ProtocolMeta.__subclasscheck__` (#105152)
…' to `_ProtocolMeta.__subclasscheck__` (pythonGH-105152) (cherry picked from commit c05c31d) Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
With some debugging we found that this is due to code in _abc.c that iterates over all the Line 768 in c05c31d
Alex's PR #105152 works around this problem by re-arranging the code in typing.py. In #105159 I propose a fix on the ABC side instead. We should consider merging that PR too to prevent similar problems with other ABC subclasses. |
This issue is fixed, and Jelle's decided not to pursue #105159, so I'll close this |
On
main
, anisinstance()
check againstSized
works just the same as it does on Python 3.11:However! If you first subclass
Sized
like this,TypeError
is raised on thatisinstance()
check!This was originally reported by @vnmabus in python/typing_extensions#207.
Note that (because of the
abc
-module cache), this doesn't reproduce if you do anisinstance()
check before subclassingtyping.Sized
:Linked PRs
_ProtocolMeta.__subclasscheck__
#105152_ProtocolMeta.__subclasscheck__
(GH-105152) #105160The text was updated successfully, but these errors were encountered: