Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Closed
Description
Bug report
On Python 3.11:
>>>from typingimport*>>>@runtime_checkable...classFoo(Protocol):... x=1...@classmethod...def__subclasshook__(cls,other):...returnhasattr(other,'x')...>>>issubclass(object, Foo)False
On Python 3.12:
>>>from typingimport*>>>@runtime_checkable...classFoo(Protocol):... x=1...@classmethod...def__subclasshook__(cls,other):...return hsattr(cls,'x')...>>>issubclass(object, Foo)Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\alexw\coding\cpython\Lib\typing.py", line 1829, in __subclasscheck__ raise TypeError(TypeError: Protocols with non-method members don't support issubclass()
I think I prefer the Python 3.11 behaviour here, since the whole point of allowing protocols to define custom__subclasshook__ methods is so that users can customise howissubclass() works on user-defined protocols.