[Python-checkins] bpo-29916: Include PyGetSetDef in C API extension documentation. (#831) (#3609)

Serhiy Storchaka webhook-mailer at python.org
Sat Sep 16 07:30:10 EDT 2017


https://github.com/python/cpython/commit/41376241e364e4f84cd14631634604edbd105da0
commit: 41376241e364e4f84cd14631634604edbd105da0
branch: 2.7
author: Michael Seifert <michaelseifert04 at yahoo.de>
committer: Serhiy Storchaka <storchaka at gmail.com>
date: 2017-09-16T14:30:07+03:00
summary:

bpo-29916: Include PyGetSetDef in C API extension documentation. (#831) (#3609)

(cherry picked from commit da67e0d644bd3185efdaa4d15cc2ac0828ca83f9)

files:
M Doc/c-api/structures.rst
M Doc/c-api/typeobj.rst

diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst
index 782cec29d83..af6a8c38cd0 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 2ebbd52a381..18edcdd7e5a 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
 



More information about the Python-checkins mailing list