]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-90190: Add doc for using `singledispatch` with precise collection type hints ...
authorMatt Delengowski <matt.delengowski@gmail.com>
Fri, 27 Sep 2024 21:10:29 +0000 (17:10 -0400)
committerGitHub <noreply@github.com>
Fri, 27 Sep 2024 21:10:29 +0000 (21:10 +0000)
Doc/library/functools.rst

index c2c25ca67f338a0a735b47b3957afd32491043a2..46136def06dc05c4901fe36cd675c0e1a70cb3e5 100644 (file)
@@ -543,6 +543,25 @@ The :mod:`functools` module defines the following functions:
      ...     print(arg.real, arg.imag)
      ...
 
+   For code that dispatches on a collections type (e.g., ``list``), but wants
+   to typehint the items of the collection (e.g., ``list[int]``), the
+   dispatch type should be passed explicitly to the decorator itself with the
+   typehint going into the function definition::
+
+     >>> @fun.register(list)
+     ... def _(arg: list[int], verbose=False):
+     ...     if verbose:
+     ...         print("Enumerate this:")
+     ...     for i, elem in enumerate(arg):
+     ...         print(i, elem)
+
+   .. note::
+
+      At runtime the function will dispatch on an instance of a list regardless
+      of the type contained within the list i.e. ``[1,2,3]`` will be
+      dispatched the same as ``["foo", "bar", "baz"]``. The annotation
+      provided in this example is for static type checkers only and has no
+      runtime impact.
 
    To enable registering :term:`lambdas<lambda>` and pre-existing functions,
    the :func:`register` attribute can also be used in a functional form::