Commit 4c4bf3e1 authored by Georg Brandl's avatar Georg Brandl

#6421: The self argument of module-level PyCFunctions is now a reference to the module object.

parent e469897c
...@@ -146,12 +146,10 @@ convention flags can be combined with a binding flag. ...@@ -146,12 +146,10 @@ convention flags can be combined with a binding flag.
This is the typical calling convention, where the methods have the type This is the typical calling convention, where the methods have the type
:ctype:`PyCFunction`. The function expects two :ctype:`PyObject\*` values. :ctype:`PyCFunction`. The function expects two :ctype:`PyObject\*` values.
The first one is the *self* object for methods; for module functions, it The first one is the *self* object for methods; for module functions, it is
has the value given to :cfunc:`Py_InitModule4` (or *NULL* if the module object. The second parameter (often called *args*) is a tuple
:cfunc:`Py_InitModule` was used). The second parameter (often called object representing all arguments. This parameter is typically processed
*args*) is a tuple object representing all arguments. This parameter is using :cfunc:`PyArg_ParseTuple` or :cfunc:`PyArg_UnpackTuple`.
typically processed using :cfunc:`PyArg_ParseTuple` or
:cfunc:`PyArg_UnpackTuple`.
.. data:: METH_KEYWORDS .. data:: METH_KEYWORDS
...@@ -167,9 +165,9 @@ convention flags can be combined with a binding flag. ...@@ -167,9 +165,9 @@ convention flags can be combined with a binding flag.
Methods without parameters don't need to check whether arguments are given if Methods without parameters don't need to check whether arguments are given if
they are listed with the :const:`METH_NOARGS` flag. They need to be of type they are listed with the :const:`METH_NOARGS` flag. They need to be of type
:ctype:`PyCFunction`. When used with object methods, the first parameter is :ctype:`PyCFunction`. The first parameter is typically named *self* and will
typically named ``self`` and will hold a reference to the object instance. hold a reference to the module or object instance. In all cases the second
In all cases the second parameter will be *NULL*. parameter will be *NULL*.
.. data:: METH_O .. data:: METH_O
......
...@@ -82,10 +82,8 @@ example, the single expression ``"ls -l"``) to the arguments passed to the C ...@@ -82,10 +82,8 @@ example, the single expression ``"ls -l"``) to the arguments passed to the C
function. The C function always has two arguments, conventionally named *self* function. The C function always has two arguments, conventionally named *self*
and *args*. and *args*.
The *self* argument is only used when the C function implements a built-in The *self* argument points to the module object for module-level functions;
method, not a function. In the example, *self* will always be a *NULL* pointer, for a method it would point to the object instance.
since we are defining a function, not a method. (This is done so that the
interpreter doesn't have to understand two different types of C functions.)
The *args* argument will be a pointer to a Python tuple object containing the The *args* argument will be a pointer to a Python tuple object containing the
arguments. Each item of the tuple corresponds to an argument in the call's arguments. Each item of the tuple corresponds to an argument in the call's
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment