blob: 100573c5693fcdd4b073e138e30ae460de8bebde [file] [log] [blame]
Stéphane Wirtelcbb64842019-05-17 11:55:34 +02001.. highlight:: c
Georg Brandl54a3faa2008-01-20 09:30:57 +00002
3.. _common-structs:
4
5Common Object Structures
6========================
7
8There are a large number of structures which are used in the definition of
9object types for Python. This section describes these structures and how they
10are used.
11
Jeroen Demeyer96699312019-09-10 12:41:59 +020012
13Base object types and macros
14----------------------------
15
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +000016All Python objects ultimately share a small number of fields at the beginning
17of the object's representation in memory. These are represented by the
Georg Brandl60203b42010-10-06 10:11:56 +000018:c:type:`PyObject` and :c:type:`PyVarObject` types, which are defined, in turn,
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +000019by the expansions of some macros also used, whether directly or indirectly, in
20the definition of all other Python objects.
Georg Brandl54a3faa2008-01-20 09:30:57 +000021
22
Georg Brandl60203b42010-10-06 10:11:56 +000023.. c:type:: PyObject
Georg Brandl54a3faa2008-01-20 09:30:57 +000024
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +000025 All object types are extensions of this type. This is a type which
26 contains the information Python needs to treat a pointer to an object as an
27 object. In a normal "release" build, it contains only the object's
Gregory P. Smith1b244652015-04-14 11:12:53 -070028 reference count and a pointer to the corresponding type object.
Gregory P. Smith0f2f3bc2015-04-14 11:21:05 -070029 Nothing is actually declared to be a :c:type:`PyObject`, but every pointer
30 to a Python object can be cast to a :c:type:`PyObject*`. Access to the
31 members must be done by using the macros :c:macro:`Py_REFCNT` and
Gregory P. Smith1b244652015-04-14 11:12:53 -070032 :c:macro:`Py_TYPE`.
Georg Brandl54a3faa2008-01-20 09:30:57 +000033
34
Georg Brandl60203b42010-10-06 10:11:56 +000035.. c:type:: PyVarObject
Georg Brandl54a3faa2008-01-20 09:30:57 +000036
Georg Brandl60203b42010-10-06 10:11:56 +000037 This is an extension of :c:type:`PyObject` that adds the :attr:`ob_size`
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +000038 field. This is only used for objects that have some notion of *length*.
Gregory P. Smith1b244652015-04-14 11:12:53 -070039 This type does not often appear in the Python/C API.
40 Access to the members must be done by using the macros
41 :c:macro:`Py_REFCNT`, :c:macro:`Py_TYPE`, and :c:macro:`Py_SIZE`.
Georg Brandl54a3faa2008-01-20 09:30:57 +000042
Georg Brandl54a3faa2008-01-20 09:30:57 +000043
Georg Brandl60203b42010-10-06 10:11:56 +000044.. c:macro:: PyObject_HEAD
Georg Brandl54a3faa2008-01-20 09:30:57 +000045
Gregory P. Smith1b244652015-04-14 11:12:53 -070046 This is a macro used when declaring new types which represent objects
47 without a varying length. The PyObject_HEAD macro expands to::
Georg Brandl54a3faa2008-01-20 09:30:57 +000048
Gregory P. Smith1b244652015-04-14 11:12:53 -070049 PyObject ob_base;
Georg Brandl54a3faa2008-01-20 09:30:57 +000050
Zachary Ware5c676f62015-07-06 23:27:15 -050051 See documentation of :c:type:`PyObject` above.
Georg Brandl54a3faa2008-01-20 09:30:57 +000052
53
Georg Brandl60203b42010-10-06 10:11:56 +000054.. c:macro:: PyObject_VAR_HEAD
Georg Brandl54a3faa2008-01-20 09:30:57 +000055
Gregory P. Smith1b244652015-04-14 11:12:53 -070056 This is a macro used when declaring new types which represent objects
57 with a length that varies from instance to instance.
58 The PyObject_VAR_HEAD macro expands to::
Georg Brandl54a3faa2008-01-20 09:30:57 +000059
Gregory P. Smith1b244652015-04-14 11:12:53 -070060 PyVarObject ob_base;
Georg Brandl54a3faa2008-01-20 09:30:57 +000061
Gregory P. Smith1b244652015-04-14 11:12:53 -070062 See documentation of :c:type:`PyVarObject` above.
63
64
65.. c:macro:: Py_TYPE(o)
66
Zachary Waree36402a2015-07-06 23:58:12 -050067 This macro is used to access the :attr:`ob_type` member of a Python object.
Gregory P. Smith1b244652015-04-14 11:12:53 -070068 It expands to::
69
70 (((PyObject*)(o))->ob_type)
71
72
73.. c:macro:: Py_REFCNT(o)
74
Zachary Waree36402a2015-07-06 23:58:12 -050075 This macro is used to access the :attr:`ob_refcnt` member of a Python
76 object.
Gregory P. Smith1b244652015-04-14 11:12:53 -070077 It expands to::
78
79 (((PyObject*)(o))->ob_refcnt)
80
81
Victor Stinnerc86a1122020-02-07 01:24:29 +010082.. c:function:: void Py_SET_REFCNT(PyObject *o, Py_ssize_t refcnt)
83
84 Set the object *o* reference counter to *refcnt*.
85
86 .. versionadded:: 3.9
87
88
Gregory P. Smith1b244652015-04-14 11:12:53 -070089.. c:macro:: Py_SIZE(o)
90
Zachary Waree36402a2015-07-06 23:58:12 -050091 This macro is used to access the :attr:`ob_size` member of a Python object.
Gregory P. Smith1b244652015-04-14 11:12:53 -070092 It expands to::
93
94 (((PyVarObject*)(o))->ob_size)
Georg Brandl54a3faa2008-01-20 09:30:57 +000095
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +000096
Georg Brandl60203b42010-10-06 10:11:56 +000097.. c:macro:: PyObject_HEAD_INIT(type)
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +000098
99 This is a macro which expands to initialization values for a new
Georg Brandl60203b42010-10-06 10:11:56 +0000100 :c:type:`PyObject` type. This macro expands to::
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000101
102 _PyObject_EXTRA_INIT
103 1, type,
104
105
Georg Brandl60203b42010-10-06 10:11:56 +0000106.. c:macro:: PyVarObject_HEAD_INIT(type, size)
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000107
108 This is a macro which expands to initialization values for a new
Georg Brandl60203b42010-10-06 10:11:56 +0000109 :c:type:`PyVarObject` type, including the :attr:`ob_size` field.
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000110 This macro expands to::
111
112 _PyObject_EXTRA_INIT
113 1, type, size,
Georg Brandl54a3faa2008-01-20 09:30:57 +0000114
115
Jeroen Demeyer96699312019-09-10 12:41:59 +0200116Implementing functions and methods
117----------------------------------
118
Georg Brandl60203b42010-10-06 10:11:56 +0000119.. c:type:: PyCFunction
Georg Brandl54a3faa2008-01-20 09:30:57 +0000120
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000121 Type of the functions used to implement most Python callables in C.
Georg Brandl60203b42010-10-06 10:11:56 +0000122 Functions of this type take two :c:type:`PyObject\*` parameters and return
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200123 one such value. If the return value is ``NULL``, an exception shall have
124 been set. If not ``NULL``, the return value is interpreted as the return
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000125 value of the function as exposed in Python. The function must return a new
126 reference.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000127
128
Georg Brandl60203b42010-10-06 10:11:56 +0000129.. c:type:: PyCFunctionWithKeywords
Georg Brandl54a3faa2008-01-20 09:30:57 +0000130
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200131 Type of the functions used to implement Python callables in C
132 with signature :const:`METH_VARARGS | METH_KEYWORDS`.
133
134
135.. c:type:: _PyCFunctionFast
136
137 Type of the functions used to implement Python callables in C
138 with signature :const:`METH_FASTCALL`.
139
140
141.. c:type:: _PyCFunctionFastWithKeywords
142
143 Type of the functions used to implement Python callables in C
144 with signature :const:`METH_FASTCALL | METH_KEYWORDS`.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000145
146
Georg Brandl60203b42010-10-06 10:11:56 +0000147.. c:type:: PyMethodDef
Georg Brandl54a3faa2008-01-20 09:30:57 +0000148
149 Structure used to describe a method of an extension type. This structure has
150 four fields:
151
Serhiy Storchaka84b8e922017-03-30 10:01:03 +0300152 +------------------+---------------+-------------------------------+
153 | Field | C Type | Meaning |
154 +==================+===============+===============================+
155 | :attr:`ml_name` | const char \* | name of the method |
156 +------------------+---------------+-------------------------------+
157 | :attr:`ml_meth` | PyCFunction | pointer to the C |
158 | | | implementation |
159 +------------------+---------------+-------------------------------+
160 | :attr:`ml_flags` | int | flag bits indicating how the |
161 | | | call should be constructed |
162 +------------------+---------------+-------------------------------+
163 | :attr:`ml_doc` | const char \* | points to the contents of the |
164 | | | docstring |
165 +------------------+---------------+-------------------------------+
Georg Brandl54a3faa2008-01-20 09:30:57 +0000166
167The :attr:`ml_meth` is a C function pointer. The functions may be of different
Georg Brandl60203b42010-10-06 10:11:56 +0000168types, but they always return :c:type:`PyObject\*`. If the function is not of
169the :c:type:`PyCFunction`, the compiler will require a cast in the method table.
170Even though :c:type:`PyCFunction` defines the first parameter as
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500171:c:type:`PyObject\*`, it is common that the method implementation uses the
Georg Brandl54a3faa2008-01-20 09:30:57 +0000172specific C type of the *self* object.
173
174The :attr:`ml_flags` field is a bitfield which can include the following flags.
175The individual flags indicate either a calling convention or a binding
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200176convention.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000177
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200178There are four basic calling conventions for positional arguments
179and two of them can be combined with :const:`METH_KEYWORDS` to support
180also keyword arguments. So there are a total of 6 calling conventions:
Georg Brandl54a3faa2008-01-20 09:30:57 +0000181
182.. data:: METH_VARARGS
183
184 This is the typical calling convention, where the methods have the type
Georg Brandl60203b42010-10-06 10:11:56 +0000185 :c:type:`PyCFunction`. The function expects two :c:type:`PyObject\*` values.
Georg Brandl21dc5ba2009-07-11 10:43:08 +0000186 The first one is the *self* object for methods; for module functions, it is
187 the module object. The second parameter (often called *args*) is a tuple
188 object representing all arguments. This parameter is typically processed
Georg Brandl60203b42010-10-06 10:11:56 +0000189 using :c:func:`PyArg_ParseTuple` or :c:func:`PyArg_UnpackTuple`.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000190
191
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200192.. data:: METH_VARARGS | METH_KEYWORDS
Georg Brandl54a3faa2008-01-20 09:30:57 +0000193
Georg Brandl60203b42010-10-06 10:11:56 +0000194 Methods with these flags must be of type :c:type:`PyCFunctionWithKeywords`.
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200195 The function expects three parameters: *self*, *args*, *kwargs* where
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200196 *kwargs* is a dictionary of all the keyword arguments or possibly ``NULL``
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200197 if there are no keyword arguments. The parameters are typically processed
198 using :c:func:`PyArg_ParseTupleAndKeywords`.
199
200
201.. data:: METH_FASTCALL
202
203 Fast calling convention supporting only positional arguments.
204 The methods have the type :c:type:`_PyCFunctionFast`.
205 The first parameter is *self*, the second parameter is a C array
206 of :c:type:`PyObject\*` values indicating the arguments and the third
207 parameter is the number of arguments (the length of the array).
208
209 This is not part of the :ref:`limited API <stable>`.
210
211 .. versionadded:: 3.7
212
213
214.. data:: METH_FASTCALL | METH_KEYWORDS
215
216 Extension of :const:`METH_FASTCALL` supporting also keyword arguments,
217 with methods of type :c:type:`_PyCFunctionFastWithKeywords`.
Jeroen Demeyer9a13a382019-11-12 14:08:00 +0100218 Keyword arguments are passed the same way as in the
219 :ref:`vectorcall protocol <vectorcall>`:
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200220 there is an additional fourth :c:type:`PyObject\*` parameter
221 which is a tuple representing the names of the keyword arguments
Jeroen Demeyer05677862019-08-16 12:41:27 +0200222 (which are guaranteed to be strings)
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200223 or possibly ``NULL`` if there are no keywords. The values of the keyword
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200224 arguments are stored in the *args* array, after the positional arguments.
225
226 This is not part of the :ref:`limited API <stable>`.
227
228 .. versionadded:: 3.7
Georg Brandl54a3faa2008-01-20 09:30:57 +0000229
230
231.. data:: METH_NOARGS
232
233 Methods without parameters don't need to check whether arguments are given if
234 they are listed with the :const:`METH_NOARGS` flag. They need to be of type
Georg Brandl60203b42010-10-06 10:11:56 +0000235 :c:type:`PyCFunction`. The first parameter is typically named *self* and will
Georg Brandl21dc5ba2009-07-11 10:43:08 +0000236 hold a reference to the module or object instance. In all cases the second
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200237 parameter will be ``NULL``.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000238
239
240.. data:: METH_O
241
242 Methods with a single object argument can be listed with the :const:`METH_O`
Georg Brandl60203b42010-10-06 10:11:56 +0000243 flag, instead of invoking :c:func:`PyArg_ParseTuple` with a ``"O"`` argument.
244 They have the type :c:type:`PyCFunction`, with the *self* parameter, and a
245 :c:type:`PyObject\*` parameter representing the single argument.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000246
247
248These two constants are not used to indicate the calling convention but the
249binding when use with methods of classes. These may not be used for functions
250defined for modules. At most one of these flags may be set for any given
251method.
252
253
254.. data:: METH_CLASS
255
256 .. index:: builtin: classmethod
257
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000258 The method will be passed the type object as the first parameter rather
259 than an instance of the type. This is used to create *class methods*,
260 similar to what is created when using the :func:`classmethod` built-in
261 function.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000262
263
264.. data:: METH_STATIC
265
266 .. index:: builtin: staticmethod
267
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200268 The method will be passed ``NULL`` as the first parameter rather than an
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000269 instance of the type. This is used to create *static methods*, similar to
270 what is created when using the :func:`staticmethod` built-in function.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000271
272One other constant controls whether a method is loaded in place of another
273definition with the same method name.
274
275
276.. data:: METH_COEXIST
277
278 The method will be loaded in place of existing definitions. Without
279 *METH_COEXIST*, the default is to skip repeated definitions. Since slot
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000280 wrappers are loaded before the method table, the existence of a
281 *sq_contains* slot, for example, would generate a wrapped method named
282 :meth:`__contains__` and preclude the loading of a corresponding
283 PyCFunction with the same name. With the flag defined, the PyCFunction
284 will be loaded in place of the wrapper object and will co-exist with the
285 slot. This is helpful because calls to PyCFunctions are optimized more
286 than wrapper object calls.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000287
Georg Brandl1f01deb2009-01-03 22:47:39 +0000288
Jeroen Demeyer96699312019-09-10 12:41:59 +0200289Accessing attributes of extension types
290---------------------------------------
291
Georg Brandl60203b42010-10-06 10:11:56 +0000292.. c:type:: PyMemberDef
Georg Brandl1f01deb2009-01-03 22:47:39 +0000293
294 Structure which describes an attribute of a type which corresponds to a C
295 struct member. Its fields are:
296
Serhiy Storchaka84b8e922017-03-30 10:01:03 +0300297 +------------------+---------------+-------------------------------+
298 | Field | C Type | Meaning |
299 +==================+===============+===============================+
300 | :attr:`name` | const char \* | name of the member |
301 +------------------+---------------+-------------------------------+
302 | :attr:`!type` | int | the type of the member in the |
303 | | | C struct |
304 +------------------+---------------+-------------------------------+
305 | :attr:`offset` | Py_ssize_t | the offset in bytes that the |
306 | | | member is located on the |
307 | | | type's object struct |
308 +------------------+---------------+-------------------------------+
309 | :attr:`flags` | int | flag bits indicating if the |
310 | | | field should be read-only or |
311 | | | writable |
312 +------------------+---------------+-------------------------------+
313 | :attr:`doc` | const char \* | points to the contents of the |
314 | | | docstring |
315 +------------------+---------------+-------------------------------+
Georg Brandl1f01deb2009-01-03 22:47:39 +0000316
csabellac3c7ef02017-03-29 20:27:50 -0400317 :attr:`!type` can be one of many ``T_`` macros corresponding to various C
Georg Brandl1f01deb2009-01-03 22:47:39 +0000318 types. When the member is accessed in Python, it will be converted to the
319 equivalent Python type.
320
321 =============== ==================
322 Macro name C type
323 =============== ==================
324 T_SHORT short
325 T_INT int
326 T_LONG long
327 T_FLOAT float
328 T_DOUBLE double
Serhiy Storchaka84b8e922017-03-30 10:01:03 +0300329 T_STRING const char \*
Georg Brandl1f01deb2009-01-03 22:47:39 +0000330 T_OBJECT PyObject \*
331 T_OBJECT_EX PyObject \*
332 T_CHAR char
333 T_BYTE char
Benjamin Petersond23f8222009-04-05 19:13:16 +0000334 T_UBYTE unsigned char
Georg Brandl1f01deb2009-01-03 22:47:39 +0000335 T_UINT unsigned int
336 T_USHORT unsigned short
337 T_ULONG unsigned long
338 T_BOOL char
339 T_LONGLONG long long
340 T_ULONGLONG unsigned long long
341 T_PYSSIZET Py_ssize_t
342 =============== ==================
343
Georg Brandl60203b42010-10-06 10:11:56 +0000344 :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX` differ in that
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200345 :c:macro:`T_OBJECT` returns ``None`` if the member is ``NULL`` and
Georg Brandl60203b42010-10-06 10:11:56 +0000346 :c:macro:`T_OBJECT_EX` raises an :exc:`AttributeError`. Try to use
347 :c:macro:`T_OBJECT_EX` over :c:macro:`T_OBJECT` because :c:macro:`T_OBJECT_EX`
Ezio Melotti479def32010-01-03 09:11:59 +0000348 handles use of the :keyword:`del` statement on that attribute more correctly
Georg Brandl60203b42010-10-06 10:11:56 +0000349 than :c:macro:`T_OBJECT`.
Georg Brandl1f01deb2009-01-03 22:47:39 +0000350
Serhiy Storchaka1ecf7d22016-10-27 21:41:19 +0300351 :attr:`flags` can be ``0`` for write and read access or :c:macro:`READONLY` for
Georg Brandl60203b42010-10-06 10:11:56 +0000352 read-only access. Using :c:macro:`T_STRING` for :attr:`type` implies
Windson yang689d5552018-11-18 03:16:51 +0800353 :c:macro:`READONLY`. :c:macro:`T_STRING` data is interpreted as UTF-8.
354 Only :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX`
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200355 members can be deleted. (They are set to ``NULL``).
Michael Seifertda67e0d2017-09-15 18:25:27 +0200356
Petr Viktorin468f8a62019-09-25 13:06:16 +0200357 .. _pymemberdef-offsets:
358
359 Heap allocated types (created using :c:func:`PyType_FromSpec` or similar),
Gurupad Hegde6c7bb382019-12-28 17:16:02 -0500360 ``PyMemberDef`` may contain definitions for the special members
Petr Viktorin468f8a62019-09-25 13:06:16 +0200361 ``__dictoffset__`` and ``__weaklistoffset__``, corresponding to
362 :c:member:`~PyTypeObject.tp_dictoffset` and
363 :c:member:`~PyTypeObject.tp_weaklistoffset` in type objects.
364 These must be defined with ``T_PYSSIZET`` and ``READONLY``, for example::
365
366 static PyMemberDef spam_type_members[] = {
367 {"__dictoffset__", T_PYSSIZET, offsetof(Spam_object, dict), READONLY},
368 {NULL} /* Sentinel */
369 };
Michael Seifertda67e0d2017-09-15 18:25:27 +0200370
371.. c:type:: PyGetSetDef
372
373 Structure to define property-like access for a type. See also description of
374 the :c:member:`PyTypeObject.tp_getset` slot.
375
376 +-------------+------------------+-----------------------------------+
377 | Field | C Type | Meaning |
378 +=============+==================+===================================+
379 | name | const char \* | attribute name |
380 +-------------+------------------+-----------------------------------+
381 | get | getter | C Function to get the attribute |
382 +-------------+------------------+-----------------------------------+
383 | set | setter | optional C function to set or |
384 | | | delete the attribute, if omitted |
385 | | | the attribute is readonly |
386 +-------------+------------------+-----------------------------------+
387 | doc | const char \* | optional docstring |
388 +-------------+------------------+-----------------------------------+
389 | closure | void \* | optional function pointer, |
390 | | | providing additional data for |
391 | | | getter and setter |
392 +-------------+------------------+-----------------------------------+
393
394 The ``get`` function takes one :c:type:`PyObject\*` parameter (the
395 instance) and a function pointer (the associated ``closure``)::
396
397 typedef PyObject *(*getter)(PyObject *, void *);
398
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200399 It should return a new reference on success or ``NULL`` with a set exception
Michael Seifertda67e0d2017-09-15 18:25:27 +0200400 on failure.
401
402 ``set`` functions take two :c:type:`PyObject\*` parameters (the instance and
403 the value to be set) and a function pointer (the associated ``closure``)::
404
405 typedef int (*setter)(PyObject *, PyObject *, void *);
406
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200407 In case the attribute should be deleted the second parameter is ``NULL``.
Michael Seifertda67e0d2017-09-15 18:25:27 +0200408 Should return ``0`` on success or ``-1`` with a set exception on failure.