From: Alex Waygood Date: Wed, 5 Apr 2023 09:07:30 +0000 (+0100) Subject: gh-74690: typing: Simplify and optimise `_ProtocolMeta.__instancecheck__` (#103159) X-Git-Tag: v3.12.0b1~645 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=47753ecde21b79b5c5f11d883946fda2a340e427;p=thirdparty%2FPython%2Fcpython.git gh-74690: typing: Simplify and optimise `_ProtocolMeta.__instancecheck__` (#103159) --- 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 @@ 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):