From: Michael Seifert Date: Sat, 16 Sep 2017 11:30:07 +0000 (+0200) Subject: bpo-29916: Include PyGetSetDef in C API extension documentation. (#831) (#3609) X-Git-Tag: v2.7.15rc1~198 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=41376241e364e4f84cd14631634604edbd105da0;p=python bpo-29916: Include PyGetSetDef in C API extension documentation. (#831) (#3609) (cherry picked from commit da67e0d644bd3185efdaa4d15cc2ac0828ca83f9) --- diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst index 782cec29d8..af6a8c38cd 100644 --- a/Doc/c-api/structures.rst +++ b/Doc/c-api/structures.rst @@ -320,6 +320,46 @@ definition with the same method name. members can be deleted. (They are set to *NULL*). +.. c:type:: PyGetSetDef + + Structure to define property-like access for a type. See also description of + the :c:member:`PyTypeObject.tp_getset` slot. + + +-------------+------------------+-----------------------------------+ + | Field | C Type | Meaning | + +=============+==================+===================================+ + | name | char \* | attribute name | + +-------------+------------------+-----------------------------------+ + | get | getter | C Function to get the attribute | + +-------------+------------------+-----------------------------------+ + | set | setter | optional C function to set or | + | | | delete the attribute, if omitted | + | | | the attribute is readonly | + +-------------+------------------+-----------------------------------+ + | doc | char \* | optional docstring | + +-------------+------------------+-----------------------------------+ + | closure | void \* | optional function pointer, | + | | | providing additional data for | + | | | getter and setter | + +-------------+------------------+-----------------------------------+ + + The ``get`` function takes one :c:type:`PyObject\*` parameter (the + instance) and a function pointer (the associated ``closure``):: + + typedef PyObject *(*getter)(PyObject *, void *); + + It should return a new reference on success or *NULL* with a set exception + on failure. + + ``set`` functions take two :c:type:`PyObject\*` parameters (the instance and + the value to be set) and a function pointer (the associated ``closure``):: + + typedef int (*setter)(PyObject *, PyObject *, void *); + + In case the attribute should be deleted the second parameter is *NULL*. + Should return ``0`` on success or ``-1`` with a set exception on failure. + + .. c:function:: PyObject* Py_FindMethod(PyMethodDef table[], PyObject *ob, char *name) Return a bound method object for an extension type implemented in C. This diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst index 2ebbd52a38..18edcdd7e5 100644 --- a/Doc/c-api/typeobj.rst +++ b/Doc/c-api/typeobj.rst @@ -825,21 +825,6 @@ The next fields, up to and including :c:member:`~PyTypeObject.tp_weaklist`, only This field is not inherited by subtypes (computed attributes are inherited through a different mechanism). - .. XXX belongs elsewhere - - Docs for PyGetSetDef:: - - typedef PyObject *(*getter)(PyObject *, void *); - typedef int (*setter)(PyObject *, PyObject *, void *); - - typedef struct PyGetSetDef { - char *name; /* attribute name */ - getter get; /* C function to get the attribute */ - setter set; /* C function to set or delete the attribute */ - char *doc; /* optional doc string */ - void *closure; /* optional additional data for getter and setter */ - } PyGetSetDef; - .. c:member:: PyTypeObject* PyTypeObject.tp_base