summaryrefslogtreecommitdiffstats
path: root/Lib/typing.py
diff options
context:
space:
mode:
authorAlex Waygood <Alex.Waygood@Gmail.com>2023-05-19 13:30:02 (GMT)
committerGitHub <noreply@github.com>2023-05-19 13:30:02 (GMT)
commita412fc58ccb8c6739b179137321cbbb1abebcd2f (patch)
tree3e25abf45d74651ce42ff189747f54db8a164dcd /Lib/typing.py
parent9c5aa8967bd7c1b02fb1da055c6b3afcccbbb251 (diff)
downloadcpython-a412fc58ccb8c6739b179137321cbbb1abebcd2f.zip
cpython-a412fc58ccb8c6739b179137321cbbb1abebcd2f.tar.gz
cpython-a412fc58ccb8c6739b179137321cbbb1abebcd2f.tar.bz2
Improve readability of `typing._ProtocolMeta.__instancecheck__` (#104649)
Diffstat (limited to 'Lib/typing.py')
-rw-r--r--Lib/typing.py27
1 files changed, 14 insertions, 13 deletions
diff --git a/Lib/typing.py b/Lib/typing.py
index b60eb94..96393d6 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -1801,9 +1801,11 @@ class _ProtocolMeta(ABCMeta):
def __instancecheck__(cls, instance):
# We need this method for situations where attributes are
# assigned in __init__.
- is_protocol_cls = getattr(cls, "_is_protocol", False)
+ if not getattr(cls, "_is_protocol", False):
+ # i.e., it's a concrete subclass of a protocol
+ return super().__instancecheck__(instance)
+
if (
- is_protocol_cls and
not getattr(cls, '_is_runtime_protocol', False) and
not _allow_reckless_class_checks(depth=2)
):
@@ -1813,17 +1815,16 @@ class _ProtocolMeta(ABCMeta):
if super().__instancecheck__(instance):
return True
- if is_protocol_cls:
- getattr_static = _lazy_load_getattr_static()
- for attr in cls.__protocol_attrs__:
- try:
- val = getattr_static(instance, attr)
- except AttributeError:
- break
- if val is None and callable(getattr(cls, attr, None)):
- break
- else:
- return True
+ getattr_static = _lazy_load_getattr_static()
+ for attr in cls.__protocol_attrs__:
+ try:
+ val = getattr_static(instance, attr)
+ except AttributeError:
+ break
+ if val is None and callable(getattr(cls, attr, None)):
+ break
+ else:
+ return True
return False