]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-124120: Document `Annotated.__origin__` (#124125)
authorsobolevn <mail@sobolevn.me>
Tue, 24 Sep 2024 06:53:04 +0000 (09:53 +0300)
committerGitHub <noreply@github.com>
Tue, 24 Sep 2024 06:53:04 +0000 (09:53 +0300)
Co-authored-by: Brian Schubert <brianm.schubert@gmail.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Doc/library/typing.rst

index 075c58d65ce2b4e916a6b1d2550ceb6d15f8b50f..f52c593a086c0a6e640d6a72dd64ef8c863d9058 100644 (file)
@@ -1458,6 +1458,23 @@ These can be used as types in annotations. They all support subscription using
         >>> X.__metadata__
         ('very', 'important', 'metadata')
 
+   * At runtime, if you want to retrieve the original
+     type wrapped by ``Annotated``, use the :attr:`!__origin__` attribute:
+
+     .. doctest::
+
+        >>> from typing import Annotated, get_origin
+        >>> Password = Annotated[str, "secret"]
+        >>> Password.__origin__
+        <class 'str'>
+
+     Note that using :func:`get_origin` will return ``Annotated`` itself:
+
+     .. doctest::
+
+        >>> get_origin(Password)
+        typing.Annotated
+
    .. seealso::
 
       :pep:`593` - Flexible function and variable annotations
@@ -3298,6 +3315,7 @@ Introspection helpers
       assert get_origin(str) is None
       assert get_origin(Dict[str, int]) is dict
       assert get_origin(Union[int, str]) is Union
+      assert get_origin(Annotated[str, "metadata"]) is Annotated
       P = ParamSpec('P')
       assert get_origin(P.args) is P
       assert get_origin(P.kwargs) is P