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

This commit is contained in:
Alex Waygood 2023-04-05 10:07:30 +01:00 committed by GitHub
parent 264c00a1c5
commit 47753ecde2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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):