[Python-checkins] bpo-44524: Don't modify MRO when inheriting from typing.Annotated (GH-27841)
miss-islington
webhook-mailer at python.org
Wed Aug 25 14:36:59 EDT 2021
https://github.com/python/cpython/commit/06e9a35169e125488d4ae9228626eb95375f3a14
commit: 06e9a35169e125488d4ae9228626eb95375f3a14
branch: 3.10
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2021-08-25T11:36:47-07:00
summary:
bpo-44524: Don't modify MRO when inheriting from typing.Annotated (GH-27841)
(cherry picked from commit 23384a1749359f0ae7aaae052073d44b59e715a1)
Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com>
files:
M Lib/test/test_typing.py
M Lib/typing.py
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index b1cd547125633..7b2fd69808993 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -4512,6 +4512,11 @@ def test_annotated_in_other_types(self):
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):
diff --git a/Lib/typing.py b/Lib/typing.py
index 493546045a2bd..423329a98005c 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -1573,7 +1573,7 @@ def __init__(self, origin, metadata):
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 @@ def __eq__(self, other):
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.
More information about the Python-checkins
mailing list