diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-08-21 09:33:14 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-21 09:33:14 (GMT) |
commit | 5bd27c3be5734e158f67ff86087a977a25d89161 (patch) | |
tree | e40cee6a6eb8de4fad898f582263766c7ee4e43e | |
parent | 838b0e975fc2c106508eb27d19a9548533ac1e55 (diff) | |
download | cpython-5bd27c3be5734e158f67ff86087a977a25d89161.zip cpython-5bd27c3be5734e158f67ff86087a977a25d89161.tar.gz cpython-5bd27c3be5734e158f67ff86087a977a25d89161.tar.bz2 |
bpo-44524: Do not set _name of _SpecialForm without need (GH-27861) (GH-27871)
Because setting non-empty _name affects behavior of other code.
In most cases __name__ can be derived from __origin__.__name__.
(cherry picked from commit 4ceec495598e78f0776dd46d511dcc612a434dc3)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
-rw-r--r-- | Lib/test/test_typing.py | 1 | ||||
-rw-r--r-- | Lib/typing.py | 19 |
2 files changed, 8 insertions, 12 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index af7c343..b1cd547 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -4873,7 +4873,6 @@ class SpecialAttrsTests(BaseTestCase): self.assertEqual(cls.__name__, name, str(cls)) self.assertEqual(cls.__qualname__, name, str(cls)) self.assertEqual(cls.__module__, 'typing', str(cls)) - self.assertEqual(getattr(cls, '_name', name), name, str(cls)) for proto in range(pickle.HIGHEST_PROTOCOL + 1): s = pickle.dumps(cls, proto) loaded = pickle.loads(s) diff --git a/Lib/typing.py b/Lib/typing.py index 6d7ba33..4935460 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -453,7 +453,7 @@ def ClassVar(self, parameters): be used with isinstance() or issubclass(). """ item = _type_check(parameters, f'{self} accepts only single type.') - return _GenericAlias(self, (item,), name="ClassVar") + return _GenericAlias(self, (item,)) @_SpecialForm def Final(self, parameters): @@ -474,7 +474,7 @@ def Final(self, parameters): There is no runtime checking of these properties. """ item = _type_check(parameters, f'{self} accepts only single type.') - return _GenericAlias(self, (item,), name="Final") + return _GenericAlias(self, (item,)) @_SpecialForm def Union(self, parameters): @@ -512,12 +512,9 @@ def Union(self, parameters): parameters = _remove_dups_flatten(parameters) if len(parameters) == 1: return parameters[0] - if len(parameters) == 2 and type(None) in parameters: - name = "Optional" - else: - name = "Union" - return _UnionGenericAlias(self, parameters, name=name) + return _UnionGenericAlias(self, parameters, name="Optional") + return _UnionGenericAlias(self, parameters) @_SpecialForm def Optional(self, parameters): @@ -562,7 +559,7 @@ def Literal(self, parameters): except TypeError: # unhashable parameters pass - return _LiteralGenericAlias(self, parameters, name="Literal") + return _LiteralGenericAlias(self, parameters) @_SpecialForm @@ -601,7 +598,7 @@ def Concatenate(self, parameters): "ParamSpec variable.") msg = "Concatenate[arg, ...]: each arg must be a type." parameters = tuple(_type_check(p, msg) for p in parameters) - return _ConcatenateGenericAlias(self, parameters, name="Concatenate") + return _ConcatenateGenericAlias(self, parameters) @_SpecialForm @@ -649,7 +646,7 @@ def TypeGuard(self, parameters): PEP 647 (User-Defined Type Guards). """ item = _type_check(parameters, f'{self} accepts only single type.') - return _GenericAlias(self, (item,), name="TypeGuard") + return _GenericAlias(self, (item,)) class ForwardRef(_Final, _root=True): @@ -960,7 +957,7 @@ class _BaseGenericAlias(_Final, _root=True): def __getattr__(self, attr): if attr in {'__name__', '__qualname__'}: - return self._name + return self._name or self.__origin__.__name__ # We are careful for copy and pickle. # Also for simplicity we just don't relay all dunder names |