summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchgnrdv <52372310+chgnrdv@users.noreply.github.com>2023-05-10 14:48:55 (GMT)
committerGitHub <noreply@github.com>2023-05-10 14:48:55 (GMT)
commita7a2dbbf72aceef61bfb50901bfa39bfb8d6d229 (patch)
tree259df5157848d01fbeb6de6c7aac6dcd8d9e49c4
parentce8d3db25660b029fa589a2072f4daf2a8723c50 (diff)
downloadcpython-a7a2dbbf72aceef61bfb50901bfa39bfb8d6d229.zip
cpython-a7a2dbbf72aceef61bfb50901bfa39bfb8d6d229.tar.gz
cpython-a7a2dbbf72aceef61bfb50901bfa39bfb8d6d229.tar.bz2
gh-104010: Separate and improve docs for `typing.get_origin` and `typing.get_args` (#104013)
* separate documentation and examples for both functions * add examples demonstrating behaviour with unsupported types * document return value of `get_origin` for `ParamSpecArgs` and `ParamSpecKwargs` instances Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
-rw-r--r--Doc/library/typing.rst31
1 files changed, 22 insertions, 9 deletions
diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst
index ebab138..fb1c916 100644
--- a/Doc/library/typing.rst
+++ b/Doc/library/typing.rst
@@ -2876,24 +2876,37 @@ Introspection helpers
if a default value equal to ``None`` was set.
Now the annotation is returned unchanged.
-.. function:: get_args(tp)
.. function:: get_origin(tp)
- Provide basic introspection for generic types and special typing forms.
-
- For a typing object of the form ``X[Y, Z, ...]`` these functions return
- ``X`` and ``(Y, Z, ...)``. If ``X`` is a generic alias for a builtin or
+ Get the unsubscripted version of a type: for a typing object of the form
+ ``X[Y, Z, ...]`` return ``X``. If ``X`` is a generic alias for a builtin or
:mod:`collections` class, it gets normalized to the original class.
+ If ``X`` is an instance of :class:`ParamSpecArgs` or :class:`ParamSpecKwargs`,
+ return the underlying :class:`ParamSpec`.
+ Return ``None`` for unsupported objects.
+ Examples::
+
+ assert get_origin(str) is None
+ assert get_origin(Dict[str, int]) is dict
+ assert get_origin(Union[int, str]) is Union
+ P = ParamSpec('P')
+ assert get_origin(P.args) is P
+ assert get_origin(P.kwargs) is P
+
+ .. versionadded:: 3.8
+
+.. function:: get_args(tp)
+
+ Get type arguments with all substitutions performed: for a typing object
+ of the form ``X[Y, Z, ...]`` return ``(Y, Z, ...)``.
If ``X`` is a union or :class:`Literal` contained in another
generic type, the order of ``(Y, Z, ...)`` may be different from the order
of the original arguments ``[Y, Z, ...]`` due to type caching.
- For unsupported objects return ``None`` and ``()`` correspondingly.
+ Return ``()`` for unsupported objects.
Examples::
- assert get_origin(Dict[str, int]) is dict
+ assert get_args(int) == ()
assert get_args(Dict[int, str]) == (int, str)
-
- assert get_origin(Union[int, str]) is Union
assert get_args(Union[int, str]) == (int, str)
.. versionadded:: 3.8