Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a629d4c

Browse files
[3.8] bpo-40398: Fix typing.get_args() for special generic aliases. (GH-19720) (GH-19857)
(cherry picked from commit 6292be7)
1 parent 1205afb commit a629d4c

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

Lib/test/test_typing.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2913,6 +2913,9 @@ class C(Generic[T]): pass
29132913
self.assertIs(get_origin(Generic), Generic)
29142914
self.assertIs(get_origin(Generic[T]), Generic)
29152915
self.assertIs(get_origin(List[Tuple[T, T]][int]), list)
2916+
self.assertIs(get_origin(List), list)
2917+
self.assertIs(get_origin(Tuple), tuple)
2918+
self.assertIs(get_origin(Callable), collections.abc.Callable)
29162919

29172920
def test_get_args(self):
29182921
T = TypeVar('T')
@@ -2928,11 +2931,15 @@ class C(Generic[T]): pass
29282931
(int, Tuple[str, int]))
29292932
self.assertEqual(get_args(typing.Dict[int, Tuple[T, T]][Optional[int]]),
29302933
(int, Tuple[Optional[int], Optional[int]]))
2931-
self.assertEqual(get_args(Callable[[], T][int]), ([], int,))
2934+
self.assertEqual(get_args(Callable[[], T][int]), ([], int))
2935+
self.assertEqual(get_args(Callable[..., int]), (..., int))
29322936
self.assertEqual(get_args(Union[int, Callable[[Tuple[T, ...]], str]]),
29332937
(int, Callable[[Tuple[T, ...]], str]))
29342938
self.assertEqual(get_args(Tuple[int, ...]), (int, ...))
29352939
self.assertEqual(get_args(Tuple[()]), ((),))
2940+
self.assertEqual(get_args(List), ())
2941+
self.assertEqual(get_args(Tuple), ())
2942+
self.assertEqual(get_args(Callable), ())
29362943

29372944

29382945
class CollectionsAbcTests(BaseTestCase):

Lib/typing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1300,7 +1300,7 @@ def get_args(tp):
13001300
get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int])
13011301
get_args(Callable[[], T][int]) == ([], int)
13021302
"""
1303-
if isinstance(tp, _GenericAlias):
1303+
if isinstance(tp, _GenericAlias) and not tp._special:
13041304
res = tp.__args__
13051305
if get_origin(tp) is collections.abc.Callable and res[0] is not Ellipsis:
13061306
res = (list(res[:-1]), res[-1])
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
:func:`typing.get_args` now always returns an empty tuple for special
2+
generic aliases.

0 commit comments

Comments
 (0)