Structure used to describe a method of an extension type. This
structure has four fields:
Field
C Type
Meaning
ml_name
char *
name of the method
ml_meth
PyCFunction
pointer to the C implementation
ml_flags
int
flag bits indicating how the call should be
constructed
ml_doc
char *
points to the contents of the docstring
The ml_meth is a C function pointer. The functions may be of
different types, but they always return PyObject*. If the
function is not of the PyCFunction, the compiler will require
a cast in the method table. Even though PyCFunction defines
the first parameter as PyObject*, it is common that the method
implementation uses a the specific C type of the self object.
The flags can have the following values. Only METH_VARARGS
and METH_KEYWORDS can be combined; the others can't.
This is the typical calling convention, where the methods have the
type PyMethodDef. The function expects two
PyObject* values. The first one is the self object for
methods; for module functions, it has the value given to
Py_InitModule4() (or NULL if
Py_InitModule() was used). The second parameter
(often called args) is a tuple object representing all
arguments. This parameter is typically processed using
PyArg_ParseTuple().
Methods with these flags must be of type
PyCFunctionWithKeywords. The function expects three
parameters: self, args, and a dictionary of all the
keyword arguments. The flag is typically combined with
METH_VARARGS, and the parameters are typically processed
using PyArg_ParseTupleAndKeywords().
Methods without parameters don't need to check whether arguments are
given if they are listed with the METH_NOARGS flag. They
need to be of type PyNoArgsFunction: they expect a single
single PyObject* as a parameter. When used with object
methods, this parameter is typically named self and will hold
a reference to the object instance.
Methods with a single object argument can be listed with the
METH_O flag, instead of invoking
PyArg_ParseTuple() with a "O" argument. They have
the type PyCFunction, with the self parameter, and a
PyObject* parameter representing the single argument.
This calling convention is deprecated. The method must be of type
PyCFunction. The second argument is NULL if no arguments
are given, a single object if exactly one argument is given, and a
tuple of objects if more than one argument is given. There is no
way for a function using this convention to distinguish between a
call with multiple arguments and a call with a tuple as the only
argument.
Return a bound method object for an extension type implemented in
C. This can be useful in the implementation of a
tp_getattro or tp_getattr handler that does not
use the PyObject_GenericGetAttr() function.