Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32.1k
Closed
Description
Instances oftypes.GenericAlias
are accepted as the first argument ofissubclass()
:
>>>issubclass(list[int],object)True>>>issubclass(list[int],type)False
while instances oftyping.GenericAlias
are not:
>>>issubclass(typing.List[int],object)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: issubclass() arg 1 must be a class>>>issubclass(typing.List[int],type)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: issubclass() arg 1 must be a class
Although both are rejected if the second argument is an abstract class:
>>>issubclass(list[int], collections.abc.Sequence)Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/serhiy/py/cpython/Lib/abc.py", line 123, in __subclasscheck__ return _abc_subclasscheck(cls, subclass) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^TypeError: issubclass() arg 1 must be a class>>>issubclass(typing.List[int], collections.abc.Sequence)Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/serhiy/py/cpython/Lib/abc.py", line 123, in __subclasscheck__ return _abc_subclasscheck(cls, subclass) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^TypeError: issubclass() arg 1 must be a class
Usuallyissubclass(x, y)
is preceded by the checkisinstance(x, type)
, so the final result will always be false since 3.11, but if that check is omitted, you can see a difference.