From 78ce7886f09d24cdfa9dbbfca71857342f18158a Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 19 Aug 2021 20:38:52 +0300 Subject: [PATCH] bpo-44524: Do not set _name of _SpecialForm without need Becase setting non-empty _name affects other behavior. In most cases __name__ can be derived from __origin__.__name__. --- Lib/test/test_typing.py | 1 - 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 d090c5f8818da1..3bd5894f425741 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -4929,7 +4929,6 @@ def test_special_attrs(self): 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 eeeb295b6c2c21..a283fe40d2d3ff 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -461,7 +461,7 @@ class Starship: 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): @@ -482,7 +482,7 @@ class FastConnector(Connection): 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): @@ -520,12 +520,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): @@ -570,7 +567,7 @@ def open_helper(file: str, mode: MODE) -> str: except TypeError: # unhashable parameters pass - return _LiteralGenericAlias(self, parameters, name="Literal") + return _LiteralGenericAlias(self, parameters) @_SpecialForm @@ -609,7 +606,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 @@ -657,7 +654,7 @@ def is_str(val: Union[str, float]): 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): @@ -962,7 +959,7 @@ def __mro_entries__(self, bases): 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