[Python-checkins] gh-74690: typing: Simplify and optimise `_ProtocolMeta.__instancecheck__` (#103159)

AlexWaygood webhook-mailer at python.org
Wed Apr 5 05:07:38 EDT 2023


https://github.com/python/cpython/commit/47753ecde21b79b5c5f11d883946fda2a340e427
commit: 47753ecde21b79b5c5f11d883946fda2a340e427
branch: main
author: Alex Waygood <Alex.Waygood at Gmail.com>
committer: AlexWaygood <Alex.Waygood at Gmail.com>
date: 2023-04-05T10:07:30+01:00
summary:

gh-74690: typing: Simplify and optimise `_ProtocolMeta.__instancecheck__` (#103159)

files:
M Lib/typing.py

diff --git a/Lib/typing.py b/Lib/typing.py
index 442d684d14c9..f50e9b0a93b0 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -2024,20 +2024,12 @@ def __instancecheck__(cls, instance):
             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 @@ def __instancecheck__(cls, instance):
             else:
                 return True
 
-        return super().__instancecheck__(instance)
+        return False
 
 
 class Protocol(Generic, metaclass=_ProtocolMeta):



More information about the Python-checkins mailing list