From 47753ecde21b79b5c5f11d883946fda2a340e427 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Wed, 5 Apr 2023 10:07:30 +0100 Subject: gh-74690: typing: Simplify and optimise `_ProtocolMeta.__instancecheck__` (#103159) --- Lib/typing.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/Lib/typing.py b/Lib/typing.py index 442d684..f50e9b0 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -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): -- cgit v0.12