17db96d56Sopenharmony_ci.. highlight:: c
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci.. _common-structs:
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciCommon Object Structures
67db96d56Sopenharmony_ci========================
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ciThere are a large number of structures which are used in the definition of
97db96d56Sopenharmony_ciobject types for Python.  This section describes these structures and how they
107db96d56Sopenharmony_ciare used.
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciBase object types and macros
147db96d56Sopenharmony_ci----------------------------
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ciAll Python objects ultimately share a small number of fields at the beginning
177db96d56Sopenharmony_ciof the object's representation in memory.  These are represented by the
187db96d56Sopenharmony_ci:c:type:`PyObject` and :c:type:`PyVarObject` types, which are defined, in turn,
197db96d56Sopenharmony_ciby the expansions of some macros also used, whether directly or indirectly, in
207db96d56Sopenharmony_cithe definition of all other Python objects.
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ci.. c:type:: PyObject
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci   All object types are extensions of this type.  This is a type which
267db96d56Sopenharmony_ci   contains the information Python needs to treat a pointer to an object as an
277db96d56Sopenharmony_ci   object.  In a normal "release" build, it contains only the object's
287db96d56Sopenharmony_ci   reference count and a pointer to the corresponding type object.
297db96d56Sopenharmony_ci   Nothing is actually declared to be a :c:type:`PyObject`, but every pointer
307db96d56Sopenharmony_ci   to a Python object can be cast to a :c:expr:`PyObject*`.  Access to the
317db96d56Sopenharmony_ci   members must be done by using the macros :c:macro:`Py_REFCNT` and
327db96d56Sopenharmony_ci   :c:macro:`Py_TYPE`.
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci.. c:type:: PyVarObject
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci   This is an extension of :c:type:`PyObject` that adds the :attr:`ob_size`
387db96d56Sopenharmony_ci   field.  This is only used for objects that have some notion of *length*.
397db96d56Sopenharmony_ci   This type does not often appear in the Python/C API.
407db96d56Sopenharmony_ci   Access to the members must be done by using the macros
417db96d56Sopenharmony_ci   :c:macro:`Py_REFCNT`, :c:macro:`Py_TYPE`, and :c:macro:`Py_SIZE`.
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci.. c:macro:: PyObject_HEAD
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci   This is a macro used when declaring new types which represent objects
477db96d56Sopenharmony_ci   without a varying length.  The PyObject_HEAD macro expands to::
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci      PyObject ob_base;
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci   See documentation of :c:type:`PyObject` above.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci.. c:macro:: PyObject_VAR_HEAD
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci   This is a macro used when declaring new types which represent objects
577db96d56Sopenharmony_ci   with a length that varies from instance to instance.
587db96d56Sopenharmony_ci   The PyObject_VAR_HEAD macro expands to::
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci      PyVarObject ob_base;
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci   See documentation of :c:type:`PyVarObject` above.
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci.. c:function:: int Py_Is(PyObject *x, PyObject *y)
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci   Test if the *x* object is the *y* object, the same as ``x is y`` in Python.
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci   .. versionadded:: 3.10
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci.. c:function:: int Py_IsNone(PyObject *x)
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci   Test if an object is the ``None`` singleton,
757db96d56Sopenharmony_ci   the same as ``x is None`` in Python.
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci   .. versionadded:: 3.10
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci.. c:function:: int Py_IsTrue(PyObject *x)
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci   Test if an object is the ``True`` singleton,
837db96d56Sopenharmony_ci   the same as ``x is True`` in Python.
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci   .. versionadded:: 3.10
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci.. c:function:: int Py_IsFalse(PyObject *x)
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci   Test if an object is the ``False`` singleton,
917db96d56Sopenharmony_ci   the same as ``x is False`` in Python.
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci   .. versionadded:: 3.10
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci.. c:function:: PyTypeObject* Py_TYPE(PyObject *o)
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci   Get the type of the Python object *o*.
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci   Return a :term:`borrowed reference`.
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci   Use the :c:func:`Py_SET_TYPE` function to set an object type.
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci   .. versionchanged:: 3.11
1057db96d56Sopenharmony_ci      :c:func:`Py_TYPE()` is changed to an inline static function.
1067db96d56Sopenharmony_ci      The parameter type is no longer :c:expr:`const PyObject*`.
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci.. c:function:: int Py_IS_TYPE(PyObject *o, PyTypeObject *type)
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci   Return non-zero if the object *o* type is *type*. Return zero otherwise.
1127db96d56Sopenharmony_ci   Equivalent to: ``Py_TYPE(o) == type``.
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci   .. versionadded:: 3.9
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci.. c:function:: void Py_SET_TYPE(PyObject *o, PyTypeObject *type)
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci   Set the object *o* type to *type*.
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci   .. versionadded:: 3.9
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci.. c:function:: Py_ssize_t Py_REFCNT(PyObject *o)
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci   Get the reference count of the Python object *o*.
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci   Use the :c:func:`Py_SET_REFCNT()` function to set an object reference count.
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci   .. versionchanged:: 3.11
1317db96d56Sopenharmony_ci      The parameter type is no longer :c:expr:`const PyObject*`.
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci   .. versionchanged:: 3.10
1347db96d56Sopenharmony_ci      :c:func:`Py_REFCNT()` is changed to the inline static function.
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci.. c:function:: void Py_SET_REFCNT(PyObject *o, Py_ssize_t refcnt)
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci   Set the object *o* reference counter to *refcnt*.
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ci   .. versionadded:: 3.9
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci.. c:function:: Py_ssize_t Py_SIZE(PyVarObject *o)
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci   Get the size of the Python object *o*.
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci   Use the :c:func:`Py_SET_SIZE` function to set an object size.
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ci   .. versionchanged:: 3.11
1517db96d56Sopenharmony_ci      :c:func:`Py_SIZE()` is changed to an inline static function.
1527db96d56Sopenharmony_ci      The parameter type is no longer :c:expr:`const PyVarObject*`.
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci
1557db96d56Sopenharmony_ci.. c:function:: void Py_SET_SIZE(PyVarObject *o, Py_ssize_t size)
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci   Set the object *o* size to *size*.
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci   .. versionadded:: 3.9
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ci.. c:macro:: PyObject_HEAD_INIT(type)
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci   This is a macro which expands to initialization values for a new
1657db96d56Sopenharmony_ci   :c:type:`PyObject` type.  This macro expands to::
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_ci      _PyObject_EXTRA_INIT
1687db96d56Sopenharmony_ci      1, type,
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci.. c:macro:: PyVarObject_HEAD_INIT(type, size)
1727db96d56Sopenharmony_ci
1737db96d56Sopenharmony_ci   This is a macro which expands to initialization values for a new
1747db96d56Sopenharmony_ci   :c:type:`PyVarObject` type, including the :attr:`ob_size` field.
1757db96d56Sopenharmony_ci   This macro expands to::
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci      _PyObject_EXTRA_INIT
1787db96d56Sopenharmony_ci      1, type, size,
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ciImplementing functions and methods
1827db96d56Sopenharmony_ci----------------------------------
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci.. c:type:: PyCFunction
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ci   Type of the functions used to implement most Python callables in C.
1877db96d56Sopenharmony_ci   Functions of this type take two :c:expr:`PyObject*` parameters and return
1887db96d56Sopenharmony_ci   one such value.  If the return value is ``NULL``, an exception shall have
1897db96d56Sopenharmony_ci   been set.  If not ``NULL``, the return value is interpreted as the return
1907db96d56Sopenharmony_ci   value of the function as exposed in Python.  The function must return a new
1917db96d56Sopenharmony_ci   reference.
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ci   The function signature is::
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci      PyObject *PyCFunction(PyObject *self,
1967db96d56Sopenharmony_ci                            PyObject *args);
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_ci.. c:type:: PyCFunctionWithKeywords
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ci   Type of the functions used to implement Python callables in C
2017db96d56Sopenharmony_ci   with signature :const:`METH_VARARGS | METH_KEYWORDS`.
2027db96d56Sopenharmony_ci   The function signature is::
2037db96d56Sopenharmony_ci
2047db96d56Sopenharmony_ci      PyObject *PyCFunctionWithKeywords(PyObject *self,
2057db96d56Sopenharmony_ci                                        PyObject *args,
2067db96d56Sopenharmony_ci                                        PyObject *kwargs);
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci.. c:type:: _PyCFunctionFast
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci   Type of the functions used to implement Python callables in C
2127db96d56Sopenharmony_ci   with signature :const:`METH_FASTCALL`.
2137db96d56Sopenharmony_ci   The function signature is::
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci      PyObject *_PyCFunctionFast(PyObject *self,
2167db96d56Sopenharmony_ci                                 PyObject *const *args,
2177db96d56Sopenharmony_ci                                 Py_ssize_t nargs);
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci.. c:type:: _PyCFunctionFastWithKeywords
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ci   Type of the functions used to implement Python callables in C
2227db96d56Sopenharmony_ci   with signature :const:`METH_FASTCALL | METH_KEYWORDS`.
2237db96d56Sopenharmony_ci   The function signature is::
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ci      PyObject *_PyCFunctionFastWithKeywords(PyObject *self,
2267db96d56Sopenharmony_ci                                             PyObject *const *args,
2277db96d56Sopenharmony_ci                                             Py_ssize_t nargs,
2287db96d56Sopenharmony_ci                                             PyObject *kwnames);
2297db96d56Sopenharmony_ci
2307db96d56Sopenharmony_ci.. c:type:: PyCMethod
2317db96d56Sopenharmony_ci
2327db96d56Sopenharmony_ci   Type of the functions used to implement Python callables in C
2337db96d56Sopenharmony_ci   with signature :const:`METH_METHOD | METH_FASTCALL | METH_KEYWORDS`.
2347db96d56Sopenharmony_ci   The function signature is::
2357db96d56Sopenharmony_ci
2367db96d56Sopenharmony_ci      PyObject *PyCMethod(PyObject *self,
2377db96d56Sopenharmony_ci                          PyTypeObject *defining_class,
2387db96d56Sopenharmony_ci                          PyObject *const *args,
2397db96d56Sopenharmony_ci                          Py_ssize_t nargs,
2407db96d56Sopenharmony_ci                          PyObject *kwnames)
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ci   .. versionadded:: 3.9
2437db96d56Sopenharmony_ci
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci.. c:type:: PyMethodDef
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci   Structure used to describe a method of an extension type.  This structure has
2487db96d56Sopenharmony_ci   four fields:
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ci   .. c:member:: const char* ml_name
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ci      name of the method
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ci   .. c:member:: PyCFunction ml_meth
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci      pointer to the C implementation
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ci   .. c:member:: int ml_flags
2597db96d56Sopenharmony_ci
2607db96d56Sopenharmony_ci      flags bits indicating how the call should be constructed
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ci   .. c:member:: const char* ml_doc
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ci      points to the contents of the docstring
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ciThe :c:member:`ml_meth` is a C function pointer.  The functions may be of different
2677db96d56Sopenharmony_citypes, but they always return :c:expr:`PyObject*`.  If the function is not of
2687db96d56Sopenharmony_cithe :c:type:`PyCFunction`, the compiler will require a cast in the method table.
2697db96d56Sopenharmony_ciEven though :c:type:`PyCFunction` defines the first parameter as
2707db96d56Sopenharmony_ci:c:expr:`PyObject*`, it is common that the method implementation uses the
2717db96d56Sopenharmony_cispecific C type of the *self* object.
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ciThe :c:member:`ml_flags` field is a bitfield which can include the following flags.
2747db96d56Sopenharmony_ciThe individual flags indicate either a calling convention or a binding
2757db96d56Sopenharmony_ciconvention.
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ciThere are these calling conventions:
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci.. data:: METH_VARARGS
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci   This is the typical calling convention, where the methods have the type
2827db96d56Sopenharmony_ci   :c:type:`PyCFunction`. The function expects two :c:expr:`PyObject*` values.
2837db96d56Sopenharmony_ci   The first one is the *self* object for methods; for module functions, it is
2847db96d56Sopenharmony_ci   the module object.  The second parameter (often called *args*) is a tuple
2857db96d56Sopenharmony_ci   object representing all arguments. This parameter is typically processed
2867db96d56Sopenharmony_ci   using :c:func:`PyArg_ParseTuple` or :c:func:`PyArg_UnpackTuple`.
2877db96d56Sopenharmony_ci
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ci.. data:: METH_VARARGS | METH_KEYWORDS
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci   Methods with these flags must be of type :c:type:`PyCFunctionWithKeywords`.
2927db96d56Sopenharmony_ci   The function expects three parameters: *self*, *args*, *kwargs* where
2937db96d56Sopenharmony_ci   *kwargs* is a dictionary of all the keyword arguments or possibly ``NULL``
2947db96d56Sopenharmony_ci   if there are no keyword arguments.  The parameters are typically processed
2957db96d56Sopenharmony_ci   using :c:func:`PyArg_ParseTupleAndKeywords`.
2967db96d56Sopenharmony_ci
2977db96d56Sopenharmony_ci
2987db96d56Sopenharmony_ci.. data:: METH_FASTCALL
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_ci   Fast calling convention supporting only positional arguments.
3017db96d56Sopenharmony_ci   The methods have the type :c:type:`_PyCFunctionFast`.
3027db96d56Sopenharmony_ci   The first parameter is *self*, the second parameter is a C array
3037db96d56Sopenharmony_ci   of :c:expr:`PyObject*` values indicating the arguments and the third
3047db96d56Sopenharmony_ci   parameter is the number of arguments (the length of the array).
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ci   .. versionadded:: 3.7
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ci   .. versionchanged:: 3.10
3097db96d56Sopenharmony_ci
3107db96d56Sopenharmony_ci      ``METH_FASTCALL`` is now part of the stable ABI.
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci
3137db96d56Sopenharmony_ci.. data:: METH_FASTCALL | METH_KEYWORDS
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci   Extension of :const:`METH_FASTCALL` supporting also keyword arguments,
3167db96d56Sopenharmony_ci   with methods of type :c:type:`_PyCFunctionFastWithKeywords`.
3177db96d56Sopenharmony_ci   Keyword arguments are passed the same way as in the
3187db96d56Sopenharmony_ci   :ref:`vectorcall protocol <vectorcall>`:
3197db96d56Sopenharmony_ci   there is an additional fourth :c:expr:`PyObject*` parameter
3207db96d56Sopenharmony_ci   which is a tuple representing the names of the keyword arguments
3217db96d56Sopenharmony_ci   (which are guaranteed to be strings)
3227db96d56Sopenharmony_ci   or possibly ``NULL`` if there are no keywords.  The values of the keyword
3237db96d56Sopenharmony_ci   arguments are stored in the *args* array, after the positional arguments.
3247db96d56Sopenharmony_ci
3257db96d56Sopenharmony_ci   .. versionadded:: 3.7
3267db96d56Sopenharmony_ci
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ci.. data:: METH_METHOD | METH_FASTCALL | METH_KEYWORDS
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ci   Extension of :const:`METH_FASTCALL | METH_KEYWORDS` supporting the *defining
3317db96d56Sopenharmony_ci   class*, that is, the class that contains the method in question.
3327db96d56Sopenharmony_ci   The defining class might be a superclass of ``Py_TYPE(self)``.
3337db96d56Sopenharmony_ci
3347db96d56Sopenharmony_ci   The method needs to be of type :c:type:`PyCMethod`, the same as for
3357db96d56Sopenharmony_ci   ``METH_FASTCALL | METH_KEYWORDS`` with ``defining_class`` argument added after
3367db96d56Sopenharmony_ci   ``self``.
3377db96d56Sopenharmony_ci
3387db96d56Sopenharmony_ci   .. versionadded:: 3.9
3397db96d56Sopenharmony_ci
3407db96d56Sopenharmony_ci
3417db96d56Sopenharmony_ci.. data:: METH_NOARGS
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci   Methods without parameters don't need to check whether arguments are given if
3447db96d56Sopenharmony_ci   they are listed with the :const:`METH_NOARGS` flag.  They need to be of type
3457db96d56Sopenharmony_ci   :c:type:`PyCFunction`.  The first parameter is typically named *self* and will
3467db96d56Sopenharmony_ci   hold a reference to the module or object instance.  In all cases the second
3477db96d56Sopenharmony_ci   parameter will be ``NULL``.
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ci   The function must have 2 parameters. Since the second parameter is unused,
3507db96d56Sopenharmony_ci   :c:macro:`Py_UNUSED` can be used to prevent a compiler warning.
3517db96d56Sopenharmony_ci
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_ci.. data:: METH_O
3547db96d56Sopenharmony_ci
3557db96d56Sopenharmony_ci   Methods with a single object argument can be listed with the :const:`METH_O`
3567db96d56Sopenharmony_ci   flag, instead of invoking :c:func:`PyArg_ParseTuple` with a ``"O"`` argument.
3577db96d56Sopenharmony_ci   They have the type :c:type:`PyCFunction`, with the *self* parameter, and a
3587db96d56Sopenharmony_ci   :c:expr:`PyObject*` parameter representing the single argument.
3597db96d56Sopenharmony_ci
3607db96d56Sopenharmony_ci
3617db96d56Sopenharmony_ciThese two constants are not used to indicate the calling convention but the
3627db96d56Sopenharmony_cibinding when use with methods of classes.  These may not be used for functions
3637db96d56Sopenharmony_cidefined for modules.  At most one of these flags may be set for any given
3647db96d56Sopenharmony_cimethod.
3657db96d56Sopenharmony_ci
3667db96d56Sopenharmony_ci
3677db96d56Sopenharmony_ci.. data:: METH_CLASS
3687db96d56Sopenharmony_ci
3697db96d56Sopenharmony_ci   .. index:: pair: built-in function; classmethod
3707db96d56Sopenharmony_ci
3717db96d56Sopenharmony_ci   The method will be passed the type object as the first parameter rather
3727db96d56Sopenharmony_ci   than an instance of the type.  This is used to create *class methods*,
3737db96d56Sopenharmony_ci   similar to what is created when using the :func:`classmethod` built-in
3747db96d56Sopenharmony_ci   function.
3757db96d56Sopenharmony_ci
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci.. data:: METH_STATIC
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ci   .. index:: pair: built-in function; staticmethod
3807db96d56Sopenharmony_ci
3817db96d56Sopenharmony_ci   The method will be passed ``NULL`` as the first parameter rather than an
3827db96d56Sopenharmony_ci   instance of the type.  This is used to create *static methods*, similar to
3837db96d56Sopenharmony_ci   what is created when using the :func:`staticmethod` built-in function.
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ciOne other constant controls whether a method is loaded in place of another
3867db96d56Sopenharmony_cidefinition with the same method name.
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci
3897db96d56Sopenharmony_ci.. data:: METH_COEXIST
3907db96d56Sopenharmony_ci
3917db96d56Sopenharmony_ci   The method will be loaded in place of existing definitions.  Without
3927db96d56Sopenharmony_ci   *METH_COEXIST*, the default is to skip repeated definitions.  Since slot
3937db96d56Sopenharmony_ci   wrappers are loaded before the method table, the existence of a
3947db96d56Sopenharmony_ci   *sq_contains* slot, for example, would generate a wrapped method named
3957db96d56Sopenharmony_ci   :meth:`__contains__` and preclude the loading of a corresponding
3967db96d56Sopenharmony_ci   PyCFunction with the same name.  With the flag defined, the PyCFunction
3977db96d56Sopenharmony_ci   will be loaded in place of the wrapper object and will co-exist with the
3987db96d56Sopenharmony_ci   slot.  This is helpful because calls to PyCFunctions are optimized more
3997db96d56Sopenharmony_ci   than wrapper object calls.
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ciAccessing attributes of extension types
4037db96d56Sopenharmony_ci---------------------------------------
4047db96d56Sopenharmony_ci
4057db96d56Sopenharmony_ci.. c:type:: PyMemberDef
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci   Structure which describes an attribute of a type which corresponds to a C
4087db96d56Sopenharmony_ci   struct member.  Its fields are:
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci   +------------------+---------------+-------------------------------+
4117db96d56Sopenharmony_ci   | Field            | C Type        | Meaning                       |
4127db96d56Sopenharmony_ci   +==================+===============+===============================+
4137db96d56Sopenharmony_ci   | :attr:`name`     | const char \* | name of the member            |
4147db96d56Sopenharmony_ci   +------------------+---------------+-------------------------------+
4157db96d56Sopenharmony_ci   | :attr:`!type`    | int           | the type of the member in the |
4167db96d56Sopenharmony_ci   |                  |               | C struct                      |
4177db96d56Sopenharmony_ci   +------------------+---------------+-------------------------------+
4187db96d56Sopenharmony_ci   | :attr:`offset`   | Py_ssize_t    | the offset in bytes that the  |
4197db96d56Sopenharmony_ci   |                  |               | member is located on the      |
4207db96d56Sopenharmony_ci   |                  |               | type's object struct          |
4217db96d56Sopenharmony_ci   +------------------+---------------+-------------------------------+
4227db96d56Sopenharmony_ci   | :attr:`flags`    | int           | flag bits indicating if the   |
4237db96d56Sopenharmony_ci   |                  |               | field should be read-only or  |
4247db96d56Sopenharmony_ci   |                  |               | writable                      |
4257db96d56Sopenharmony_ci   +------------------+---------------+-------------------------------+
4267db96d56Sopenharmony_ci   | :attr:`doc`      | const char \* | points to the contents of the |
4277db96d56Sopenharmony_ci   |                  |               | docstring                     |
4287db96d56Sopenharmony_ci   +------------------+---------------+-------------------------------+
4297db96d56Sopenharmony_ci
4307db96d56Sopenharmony_ci   :attr:`!type` can be one of many ``T_`` macros corresponding to various C
4317db96d56Sopenharmony_ci   types.  When the member is accessed in Python, it will be converted to the
4327db96d56Sopenharmony_ci   equivalent Python type.
4337db96d56Sopenharmony_ci
4347db96d56Sopenharmony_ci   =============== ==================
4357db96d56Sopenharmony_ci   Macro name      C type
4367db96d56Sopenharmony_ci   =============== ==================
4377db96d56Sopenharmony_ci   T_SHORT         short
4387db96d56Sopenharmony_ci   T_INT           int
4397db96d56Sopenharmony_ci   T_LONG          long
4407db96d56Sopenharmony_ci   T_FLOAT         float
4417db96d56Sopenharmony_ci   T_DOUBLE        double
4427db96d56Sopenharmony_ci   T_STRING        const char \*
4437db96d56Sopenharmony_ci   T_OBJECT        PyObject \*
4447db96d56Sopenharmony_ci   T_OBJECT_EX     PyObject \*
4457db96d56Sopenharmony_ci   T_CHAR          char
4467db96d56Sopenharmony_ci   T_BYTE          char
4477db96d56Sopenharmony_ci   T_UBYTE         unsigned char
4487db96d56Sopenharmony_ci   T_UINT          unsigned int
4497db96d56Sopenharmony_ci   T_USHORT        unsigned short
4507db96d56Sopenharmony_ci   T_ULONG         unsigned long
4517db96d56Sopenharmony_ci   T_BOOL          char
4527db96d56Sopenharmony_ci   T_LONGLONG      long long
4537db96d56Sopenharmony_ci   T_ULONGLONG     unsigned long long
4547db96d56Sopenharmony_ci   T_PYSSIZET      Py_ssize_t
4557db96d56Sopenharmony_ci   =============== ==================
4567db96d56Sopenharmony_ci
4577db96d56Sopenharmony_ci   :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX` differ in that
4587db96d56Sopenharmony_ci   :c:macro:`T_OBJECT` returns ``None`` if the member is ``NULL`` and
4597db96d56Sopenharmony_ci   :c:macro:`T_OBJECT_EX` raises an :exc:`AttributeError`.  Try to use
4607db96d56Sopenharmony_ci   :c:macro:`T_OBJECT_EX` over :c:macro:`T_OBJECT` because :c:macro:`T_OBJECT_EX`
4617db96d56Sopenharmony_ci   handles use of the :keyword:`del` statement on that attribute more correctly
4627db96d56Sopenharmony_ci   than :c:macro:`T_OBJECT`.
4637db96d56Sopenharmony_ci
4647db96d56Sopenharmony_ci   :attr:`flags` can be ``0`` for write and read access or :c:macro:`READONLY` for
4657db96d56Sopenharmony_ci   read-only access.  Using :c:macro:`T_STRING` for :attr:`type` implies
4667db96d56Sopenharmony_ci   :c:macro:`READONLY`.  :c:macro:`T_STRING` data is interpreted as UTF-8.
4677db96d56Sopenharmony_ci   Only :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX`
4687db96d56Sopenharmony_ci   members can be deleted.  (They are set to ``NULL``).
4697db96d56Sopenharmony_ci
4707db96d56Sopenharmony_ci   .. _pymemberdef-offsets:
4717db96d56Sopenharmony_ci
4727db96d56Sopenharmony_ci   Heap allocated types (created using :c:func:`PyType_FromSpec` or similar),
4737db96d56Sopenharmony_ci   ``PyMemberDef`` may contain definitions for the special members
4747db96d56Sopenharmony_ci   ``__dictoffset__``, ``__weaklistoffset__`` and ``__vectorcalloffset__``,
4757db96d56Sopenharmony_ci   corresponding to
4767db96d56Sopenharmony_ci   :c:member:`~PyTypeObject.tp_dictoffset`,
4777db96d56Sopenharmony_ci   :c:member:`~PyTypeObject.tp_weaklistoffset` and
4787db96d56Sopenharmony_ci   :c:member:`~PyTypeObject.tp_vectorcall_offset` in type objects.
4797db96d56Sopenharmony_ci   These must be defined with ``T_PYSSIZET`` and ``READONLY``, for example::
4807db96d56Sopenharmony_ci
4817db96d56Sopenharmony_ci      static PyMemberDef spam_type_members[] = {
4827db96d56Sopenharmony_ci          {"__dictoffset__", T_PYSSIZET, offsetof(Spam_object, dict), READONLY},
4837db96d56Sopenharmony_ci          {NULL}  /* Sentinel */
4847db96d56Sopenharmony_ci      };
4857db96d56Sopenharmony_ci
4867db96d56Sopenharmony_ci
4877db96d56Sopenharmony_ci.. c:function:: PyObject* PyMember_GetOne(const char *obj_addr, struct PyMemberDef *m)
4887db96d56Sopenharmony_ci
4897db96d56Sopenharmony_ci   Get an attribute belonging to the object at address *obj_addr*.  The
4907db96d56Sopenharmony_ci   attribute is described by ``PyMemberDef`` *m*.  Returns ``NULL``
4917db96d56Sopenharmony_ci   on error.
4927db96d56Sopenharmony_ci
4937db96d56Sopenharmony_ci
4947db96d56Sopenharmony_ci.. c:function:: int PyMember_SetOne(char *obj_addr, struct PyMemberDef *m, PyObject *o)
4957db96d56Sopenharmony_ci
4967db96d56Sopenharmony_ci   Set an attribute belonging to the object at address *obj_addr* to object *o*.
4977db96d56Sopenharmony_ci   The attribute to set is described by ``PyMemberDef`` *m*.  Returns ``0``
4987db96d56Sopenharmony_ci   if successful and a negative value on failure.
4997db96d56Sopenharmony_ci
5007db96d56Sopenharmony_ci
5017db96d56Sopenharmony_ci.. c:type:: PyGetSetDef
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ci   Structure to define property-like access for a type. See also description of
5047db96d56Sopenharmony_ci   the :c:member:`PyTypeObject.tp_getset` slot.
5057db96d56Sopenharmony_ci
5067db96d56Sopenharmony_ci   +-------------+------------------+-----------------------------------+
5077db96d56Sopenharmony_ci   | Field       | C Type           | Meaning                           |
5087db96d56Sopenharmony_ci   +=============+==================+===================================+
5097db96d56Sopenharmony_ci   | name        | const char \*    | attribute name                    |
5107db96d56Sopenharmony_ci   +-------------+------------------+-----------------------------------+
5117db96d56Sopenharmony_ci   | get         | getter           | C function to get the attribute   |
5127db96d56Sopenharmony_ci   +-------------+------------------+-----------------------------------+
5137db96d56Sopenharmony_ci   | set         | setter           | optional C function to set or     |
5147db96d56Sopenharmony_ci   |             |                  | delete the attribute, if omitted  |
5157db96d56Sopenharmony_ci   |             |                  | the attribute is readonly         |
5167db96d56Sopenharmony_ci   +-------------+------------------+-----------------------------------+
5177db96d56Sopenharmony_ci   | doc         | const char \*    | optional docstring                |
5187db96d56Sopenharmony_ci   +-------------+------------------+-----------------------------------+
5197db96d56Sopenharmony_ci   | closure     | void \*          | optional function pointer,        |
5207db96d56Sopenharmony_ci   |             |                  | providing additional data for     |
5217db96d56Sopenharmony_ci   |             |                  | getter and setter                 |
5227db96d56Sopenharmony_ci   +-------------+------------------+-----------------------------------+
5237db96d56Sopenharmony_ci
5247db96d56Sopenharmony_ci   The ``get`` function takes one :c:expr:`PyObject*` parameter (the
5257db96d56Sopenharmony_ci   instance) and a function pointer (the associated ``closure``)::
5267db96d56Sopenharmony_ci
5277db96d56Sopenharmony_ci      typedef PyObject *(*getter)(PyObject *, void *);
5287db96d56Sopenharmony_ci
5297db96d56Sopenharmony_ci   It should return a new reference on success or ``NULL`` with a set exception
5307db96d56Sopenharmony_ci   on failure.
5317db96d56Sopenharmony_ci
5327db96d56Sopenharmony_ci   ``set`` functions take two :c:expr:`PyObject*` parameters (the instance and
5337db96d56Sopenharmony_ci   the value to be set) and a function pointer (the associated ``closure``)::
5347db96d56Sopenharmony_ci
5357db96d56Sopenharmony_ci      typedef int (*setter)(PyObject *, PyObject *, void *);
5367db96d56Sopenharmony_ci
5377db96d56Sopenharmony_ci   In case the attribute should be deleted the second parameter is ``NULL``.
5387db96d56Sopenharmony_ci   Should return ``0`` on success or ``-1`` with a set exception on failure.
539