diff options
author | Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> | 2021-06-16 14:12:25 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-16 14:12:25 (GMT) |
commit | 6773c3eaa735b5061b4a97f2c730703a32d8c9ff (patch) | |
tree | 5e25d12f1a0e2d7a0bc778c0d19da1ec45455093 /Doc/c-api | |
parent | ab030d6f9d73e7f6c2213c2e308d1ceb04761485 (diff) | |
download | cpython-6773c3eaa735b5061b4a97f2c730703a32d8c9ff.zip cpython-6773c3eaa735b5061b4a97f2c730703a32d8c9ff.tar.gz cpython-6773c3eaa735b5061b4a97f2c730703a32d8c9ff.tar.bz2 |
bpo-44392: Add Py_GenericAlias to C API docs (GH-26724)
Also fix stable ABI type definitions
Diffstat (limited to 'Doc/c-api')
-rw-r--r-- | Doc/c-api/concrete.rst | 1 | ||||
-rw-r--r-- | Doc/c-api/typehints.rst | 47 |
2 files changed, 48 insertions, 0 deletions
diff --git a/Doc/c-api/concrete.rst b/Doc/c-api/concrete.rst index c1d9fa1..84224dc 100644 --- a/Doc/c-api/concrete.rst +++ b/Doc/c-api/concrete.rst @@ -115,3 +115,4 @@ Other Objects coro.rst contextvars.rst datetime.rst + typehints.rst diff --git a/Doc/c-api/typehints.rst b/Doc/c-api/typehints.rst new file mode 100644 index 0000000..dfda96a --- /dev/null +++ b/Doc/c-api/typehints.rst @@ -0,0 +1,47 @@ +.. highlight:: c + +.. _typehintobjects: + +Objects for Type Hinting +------------------------ + +Various built-in types for type hinting are provided. Currently, +two types exist -- :ref:`GenericAlias <types-genericalias>` and +:ref:`Union <types-union>`. Only ``GenericAlias`` is exposed to C. + +.. c:function:: PyObject* Py_GenericAlias(PyObject *origin, PyObject *args) + + Create a :ref:`GenericAlias <types-genericalias>` object. + Equivalent to calling the Python class + :class:`types.GenericAlias`. The *origin* and *args* arguments set the + ``GenericAlias``\ 's ``__origin__`` and ``__args__`` attributes respectively. + *origin* should be a :c:type:`PyTypeObject*`, and *args* can be a + :c:type:`PyTupleObject*` or any ``PyObject*``. If *args* passed is + not a tuple, a 1-tuple is automatically constructed and ``__args__`` is set + to ``(args,)``. + Minimal checking is done for the arguments, so the function will succeed even + if *origin* is not a type. + The ``GenericAlias``\ 's ``__parameters__`` attribute is constructed lazily + from ``__args__``. On failure, an exception is raised and ``NULL`` is + returned. + + Here's an example of how to make an extension type generic:: + + ... + static PyMethodDef my_obj_methods[] = { + // Other methods. + ... + {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, "See PEP 585"} + ... + } + + .. seealso:: The data model method :meth:`__class_getitem__`. + + .. versionadded:: 3.9 + +.. c:var:: PyTypeObject Py_GenericAliasType + + The C type of the object returned by :c:func:`Py_GenericAlias`. Equivalent to + :class:`types.GenericAlias` in Python. + + .. versionadded:: 3.9 |