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