]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-74690: typing: Simplify and optimise `_ProtocolMeta.__instancecheck__` (#103159)
authorAlex Waygood <Alex.Waygood@Gmail.com>
Wed, 5 Apr 2023 09:07:30 +0000 (10:07 +0100)
committerGitHub <noreply@github.com>
Wed, 5 Apr 2023 09:07:30 +0000 (10:07 +0100)
Lib/typing.py

index 442d684d14c9281587f7129e25321f9978693636..f50e9b0a93b061a6d16dd0f61162360b7ef0babb 100644 (file)
@@ -2024,20 +2024,12 @@ class _ProtocolMeta(ABCMeta):
             raise TypeError("Instance and class checks can only be used with"
                             " @runtime_checkable protocols")
 
-        if not is_protocol_cls and issubclass(instance.__class__, cls):
-            return True
-
-        protocol_attrs = _get_protocol_attrs(cls)
-
-        if (
-            _is_callable_members_only(cls, protocol_attrs)
-            and issubclass(instance.__class__, cls)
-        ):
+        if super().__instancecheck__(instance):
             return True
 
         if is_protocol_cls:
             getattr_static = _lazy_load_getattr_static()
-            for attr in protocol_attrs:
+            for attr in _get_protocol_attrs(cls):
                 try:
                     val = getattr_static(instance, attr)
                 except AttributeError:
@@ -2047,7 +2039,7 @@ class _ProtocolMeta(ABCMeta):
             else:
                 return True
 
-        return super().__instancecheck__(instance)
+        return False
 
 
 class Protocol(Generic, metaclass=_ProtocolMeta):