Further deduplicate implementation of special forms (#229)
diff --git a/src/typing_extensions.py b/src/typing_extensions.py index 1f28e54..9e33402 100644 --- a/src/typing_extensions.py +++ b/src/typing_extensions.py
@@ -201,17 +201,19 @@ ClassVar = typing.ClassVar + +class _ExtensionsSpecialForm(typing._SpecialForm, _root=True): + def __repr__(self): + return 'typing_extensions.' + self._name + + # On older versions of typing there is an internal class named "Final". # 3.8+ if hasattr(typing, 'Final') and sys.version_info[:2] >= (3, 7): Final = typing.Final # 3.7 else: - class _FinalForm(typing._SpecialForm, _root=True): - - def __repr__(self): - return 'typing_extensions.' + self._name - + class _FinalForm(_ExtensionsSpecialForm, _root=True): def __getitem__(self, parameters): item = typing._type_check(parameters, f'{self._name} accepts only a single type.') @@ -303,14 +305,11 @@ def __hash__(self): return hash(frozenset(_value_and_type_iter(self.__args__))) - class _LiteralForm(typing._SpecialForm, _root=True): + class _LiteralForm(_ExtensionsSpecialForm, _root=True): def __init__(self, doc: str): self._name = 'Literal' self._doc = self.__doc__ = doc - def __repr__(self): - return 'typing_extensions.' + self._name - def __getitem__(self, parameters): if not isinstance(parameters, tuple): parameters = (parameters,) @@ -1374,11 +1373,6 @@ return () -class _ExtensionsSpecialForm(typing._SpecialForm, _root=True): - def __repr__(self): - return 'typing_extensions.' + self._name - - # 3.10+ if hasattr(typing, 'TypeAlias'): TypeAlias = typing.TypeAlias