Browse Source

bpo-44524: Don't modify MRO when inheriting from typing.Annotated (GH-27841)

(cherry picked from commit 23384a1749)

Co-authored-by: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com>
pull/27953/head
Miss Islington (bot) 4 years ago
committed by GitHub
parent
commit
06e9a35169
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      Lib/test/test_typing.py
  2. 7
      Lib/typing.py

5
Lib/test/test_typing.py

@ -4512,6 +4512,11 @@ class AnnotatedTests(BaseTestCase):
X = List[Annotated[T, 5]]
self.assertEqual(X[int], List[Annotated[int, 5]])
def test_annotated_mro(self):
class X(Annotated[int, (1, 10)]): ...
self.assertEqual(X.__mro__, (X, int, object),
"Annotated should be transparent.")
class TypeAliasTests(BaseTestCase):
def test_canonical_usage_with_variable_annotation(self):

7
Lib/typing.py

@ -1573,7 +1573,7 @@ class _AnnotatedAlias(_GenericAlias, _root=True):
if isinstance(origin, _AnnotatedAlias):
metadata = origin.__metadata__ + metadata
origin = origin.__origin__
super().__init__(origin, origin, name="Annotated")
super().__init__(origin, origin)
self.__metadata__ = metadata
def copy_with(self, params):
@ -1601,6 +1601,11 @@ class _AnnotatedAlias(_GenericAlias, _root=True):
def __hash__(self):
return hash((self.__origin__, self.__metadata__))
def __getattr__(self, attr):
if attr in {'__name__', '__qualname__'}:
return 'Annotated'
return super().__getattr__(attr)
class Annotated:
"""Add context specific metadata to a type.

Loading…
Cancel
Save