[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