diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2023-05-25 17:15:48 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-25 17:15:48 (GMT) |
commit | 930efde4c72a38cdc98dfafc94f790638639924e (patch) | |
tree | 35c85a4d3dd903254f026dec7b7440e62b438676 /Lib/typing.py | |
parent | d176f78ec23116bedaa8c5ad27fe5ca323deebaf (diff) | |
download | cpython-930efde4c72a38cdc98dfafc94f790638639924e.zip cpython-930efde4c72a38cdc98dfafc94f790638639924e.tar.gz cpython-930efde4c72a38cdc98dfafc94f790638639924e.tar.bz2 |
[3.12] gh-104935: typing: Fix interactions between `@runtime_checkable` and `Generic` (GH-104939) (#104941)
gh-104935: typing: Fix interactions between `@runtime_checkable` and `Generic` (GH-104939)
---------
(cherry picked from commit 2b7027d0b2ee2e102a24a0da27d01b8221f9351c)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Diffstat (limited to 'Lib/typing.py')
-rw-r--r-- | Lib/typing.py | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/Lib/typing.py b/Lib/typing.py index 88837db..dd172b1 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1899,7 +1899,7 @@ class Protocol(Generic, metaclass=_ProtocolMeta): annotations = getattr(base, '__annotations__', {}) if (isinstance(annotations, collections.abc.Mapping) and attr in annotations and - issubclass(other, Generic) and other._is_protocol): + issubclass(other, Generic) and getattr(other, '_is_protocol', False)): break else: return NotImplemented @@ -1917,7 +1917,7 @@ class Protocol(Generic, metaclass=_ProtocolMeta): if not (base in (object, Generic) or base.__module__ in _PROTO_ALLOWLIST and base.__name__ in _PROTO_ALLOWLIST[base.__module__] or - issubclass(base, Generic) and base._is_protocol): + issubclass(base, Generic) and getattr(base, '_is_protocol', False)): raise TypeError('Protocols can only inherit from other' ' protocols, got %r' % base) if cls.__init__ is Protocol.__init__: @@ -2064,7 +2064,7 @@ def runtime_checkable(cls): Warning: this will check only the presence of the required methods, not their type signatures! """ - if not issubclass(cls, Generic) or not cls._is_protocol: + if not issubclass(cls, Generic) or not getattr(cls, '_is_protocol', False): raise TypeError('@runtime_checkable can be only applied to protocol classes,' ' got %r' % cls) cls._is_runtime_protocol = True |