Skip to content

Commit 15df8f8

Browse files
bpo-46981: Remove typing._TypingEmpty (GH-31836)
* get_args(Tuple[()]) now returns () instead of ((),). * Tuple[Unpack[Ts]][()] now returns the result equal to Tuple[()].
1 parent 4674fd4 commit 15df8f8

File tree

3 files changed

+5
-15
lines changed

3 files changed

+5
-15
lines changed

Lib/test/test_typing.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -469,14 +469,12 @@ class G(Generic[Unpack[Ts]]): pass
469469

470470
for A in G, Tuple:
471471
B = A[Unpack[Ts]]
472-
if A != Tuple:
473-
self.assertEqual(B[()], A[()])
472+
self.assertEqual(B[()], A[()])
474473
self.assertEqual(B[float], A[float])
475474
self.assertEqual(B[float, str], A[float, str])
476475

477476
C = List[A[Unpack[Ts]]]
478-
if A != Tuple:
479-
self.assertEqual(C[()], List[A[()]])
477+
self.assertEqual(C[()], List[A[()]])
480478
self.assertEqual(C[float], List[A[float]])
481479
self.assertEqual(C[float, str], List[A[float, str]])
482480

@@ -4248,7 +4246,7 @@ class C(Generic[T]): pass
42484246
self.assertEqual(get_args(Union[int, Callable[[Tuple[T, ...]], str]]),
42494247
(int, Callable[[Tuple[T, ...]], str]))
42504248
self.assertEqual(get_args(Tuple[int, ...]), (int, ...))
4251-
self.assertEqual(get_args(Tuple[()]), ((),))
4249+
self.assertEqual(get_args(Tuple[()]), ())
42524250
self.assertEqual(get_args(Annotated[T, 'one', 2, ['three']]), (T, 'one', 2, ['three']))
42534251
self.assertEqual(get_args(List), ())
42544252
self.assertEqual(get_args(Tuple), ())

Lib/typing.py

-10
Original file line numberDiff line numberDiff line change
@@ -1220,7 +1220,6 @@ def __init__(self, origin, args, *, inst=True, name=None,
12201220
if not isinstance(args, tuple):
12211221
args = (args,)
12221222
self.__args__ = tuple(... if a is _TypingEllipsis else
1223-
() if a is _TypingEmpty else
12241223
a for a in args)
12251224
self.__parameters__ = _collect_parameters(args)
12261225
self._paramspec_tvars = _paramspec_tvars
@@ -1503,8 +1502,6 @@ def __getitem_inner__(self, params):
15031502
class _TupleType(_SpecialGenericAlias, _root=True):
15041503
@_tp_cache
15051504
def __getitem__(self, params):
1506-
if params == ():
1507-
return self.copy_with((_TypingEmpty,))
15081505
if not isinstance(params, tuple):
15091506
params = (params,)
15101507
if len(params) >= 2 and params[-1] is ...:
@@ -1735,13 +1732,6 @@ def __init_subclass__(cls, *args, **kwargs):
17351732
cls.__parameters__ = tuple(tvars)
17361733

17371734

1738-
class _TypingEmpty:
1739-
"""Internal placeholder for () or []. Used by TupleMeta and CallableMeta
1740-
to allow empty list/tuple in specific places, without allowing them
1741-
to sneak in where prohibited.
1742-
"""
1743-
1744-
17451735
class _TypingEllipsis:
17461736
"""Internal placeholder for ... (ellipsis)."""
17471737

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
``typing.get_args(typing.Tuple[()])`` now returns ``()`` instead of
2+
``((),)``.

0 commit comments

Comments
 (0)