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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
11 additions and
1 deletions
-
Lib/test/test_typing.py
-
Lib/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): |
|
|
|
|
|
|
|
@ -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. |
|
|
|
|