blob: 20d5485d5544c2241b24aece5fbb298aae688268 [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
Victor Stinner09bbebe2021-04-11 00:17:39 +020065.. c:function:: int Py_Is(const PyObject *x, const PyObject *y)
66
67 Test if the *x* object is the *y* object, the same as ``x is y`` in Python.
68
69 .. versionadded:: 3.10
70
71
72.. c:function:: int Py_IsNone(const PyObject *x)
73
74 Test if an object is the ``None`` singleton,
75 the same as ``x is None`` in Python.
76
77 .. versionadded:: 3.10
78
79
80.. c:function:: int Py_IsTrue(const PyObject *x)
81
82 Test if an object is the ``True`` singleton,
83 the same as ``x is True`` in Python.
84
85 .. versionadded:: 3.10
86
87
88.. c:function:: int Py_IsFalse(const PyObject *x)
89
90 Test if an object is the ``False`` singleton,
91 the same as ``x is False`` in Python.
92
93 .. versionadded:: 3.10
94
95
Dong-hee Naad3252b2020-05-26 01:52:54 +090096.. c:function:: PyTypeObject* Py_TYPE(const PyObject *o)
Gregory P. Smith1b244652015-04-14 11:12:53 -070097
Dong-hee Naad3252b2020-05-26 01:52:54 +090098 Get the type of the Python object *o*.
Gregory P. Smith1b244652015-04-14 11:12:53 -070099
Victor Stinner23c5f932020-11-09 13:40:47 +0100100 Return a :term:`borrowed reference`.
Dong-hee Naad3252b2020-05-26 01:52:54 +0900101
Victor Stinner0e2ac212020-11-18 18:48:06 +0100102 The :c:func:`Py_SET_TYPE` function must be used to set an object type.
Gregory P. Smith1b244652015-04-14 11:12:53 -0700103
104
Dong-hee Nad905df72020-02-14 02:37:17 +0900105.. c:function:: int Py_IS_TYPE(PyObject *o, PyTypeObject *type)
106
107 Return non-zero if the object *o* type is *type*. Return zero otherwise.
108 Equivalent to: ``Py_TYPE(o) == type``.
109
110 .. versionadded:: 3.9
111
112
Victor Stinnerd2ec81a2020-02-07 09:17:07 +0100113.. c:function:: void Py_SET_TYPE(PyObject *o, PyTypeObject *type)
114
115 Set the object *o* type to *type*.
116
117 .. versionadded:: 3.9
118
119
Victor Stinnerfe2978b2020-05-27 14:55:10 +0200120.. c:function:: Py_ssize_t Py_REFCNT(const PyObject *o)
Gregory P. Smith1b244652015-04-14 11:12:53 -0700121
Victor Stinnerfe2978b2020-05-27 14:55:10 +0200122 Get the reference count of the Python object *o*.
Gregory P. Smith1b244652015-04-14 11:12:53 -0700123
Victor Stinnerfe2978b2020-05-27 14:55:10 +0200124 .. versionchanged:: 3.10
125 :c:func:`Py_REFCNT()` is changed to the inline static function.
126 Use :c:func:`Py_SET_REFCNT()` to set an object reference count.
Gregory P. Smith1b244652015-04-14 11:12:53 -0700127
128
Victor Stinnerc86a1122020-02-07 01:24:29 +0100129.. c:function:: void Py_SET_REFCNT(PyObject *o, Py_ssize_t refcnt)
130
131 Set the object *o* reference counter to *refcnt*.
132
133 .. versionadded:: 3.9
134
135
Victor Stinnerfe2978b2020-05-27 14:55:10 +0200136.. c:function:: Py_ssize_t Py_SIZE(const PyVarObject *o)
Gregory P. Smith1b244652015-04-14 11:12:53 -0700137
Victor Stinnerfe2978b2020-05-27 14:55:10 +0200138 Get the size of the Python object *o*.
Gregory P. Smith1b244652015-04-14 11:12:53 -0700139
Victor Stinner0e2ac212020-11-18 18:48:06 +0100140 The :c:func:`Py_SET_SIZE` function must be used to set an object size.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000141
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000142
Victor Stinnerb10dc3e2020-02-07 12:05:12 +0100143.. c:function:: void Py_SET_SIZE(PyVarObject *o, Py_ssize_t size)
144
Brandt Bucher968dcd92020-02-13 09:34:45 -0800145 Set the object *o* size to *size*.
Victor Stinnerb10dc3e2020-02-07 12:05:12 +0100146
147 .. versionadded:: 3.9
148
149
Georg Brandl60203b42010-10-06 10:11:56 +0000150.. c:macro:: PyObject_HEAD_INIT(type)
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000151
152 This is a macro which expands to initialization values for a new
Georg Brandl60203b42010-10-06 10:11:56 +0000153 :c:type:`PyObject` type. This macro expands to::
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000154
155 _PyObject_EXTRA_INIT
156 1, type,
157
158
Georg Brandl60203b42010-10-06 10:11:56 +0000159.. c:macro:: PyVarObject_HEAD_INIT(type, size)
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000160
161 This is a macro which expands to initialization values for a new
Georg Brandl60203b42010-10-06 10:11:56 +0000162 :c:type:`PyVarObject` type, including the :attr:`ob_size` field.
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000163 This macro expands to::
164
165 _PyObject_EXTRA_INIT
166 1, type, size,
Georg Brandl54a3faa2008-01-20 09:30:57 +0000167
168
Jeroen Demeyer96699312019-09-10 12:41:59 +0200169Implementing functions and methods
170----------------------------------
171
Georg Brandl60203b42010-10-06 10:11:56 +0000172.. c:type:: PyCFunction
Georg Brandl54a3faa2008-01-20 09:30:57 +0000173
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000174 Type of the functions used to implement most Python callables in C.
Victor Stinner474652f2020-08-13 22:11:50 +0200175 Functions of this type take two :c:type:`PyObject*` parameters and return
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200176 one such value. If the return value is ``NULL``, an exception shall have
177 been set. If not ``NULL``, the return value is interpreted as the return
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000178 value of the function as exposed in Python. The function must return a new
179 reference.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000180
Petr Viktorine1becf42020-05-07 15:39:59 +0200181 The function signature is::
182
183 PyObject *PyCFunction(PyObject *self,
Hai Shic068b532020-05-08 01:16:01 +0800184 PyObject *args);
Georg Brandl54a3faa2008-01-20 09:30:57 +0000185
Georg Brandl60203b42010-10-06 10:11:56 +0000186.. c:type:: PyCFunctionWithKeywords
Georg Brandl54a3faa2008-01-20 09:30:57 +0000187
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200188 Type of the functions used to implement Python callables in C
189 with signature :const:`METH_VARARGS | METH_KEYWORDS`.
Petr Viktorine1becf42020-05-07 15:39:59 +0200190 The function signature is::
191
192 PyObject *PyCFunctionWithKeywords(PyObject *self,
Hai Shic068b532020-05-08 01:16:01 +0800193 PyObject *args,
Petr Viktorine1becf42020-05-07 15:39:59 +0200194 PyObject *kwargs);
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200195
196
197.. c:type:: _PyCFunctionFast
198
199 Type of the functions used to implement Python callables in C
200 with signature :const:`METH_FASTCALL`.
Petr Viktorine1becf42020-05-07 15:39:59 +0200201 The function signature is::
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200202
Petr Viktorine1becf42020-05-07 15:39:59 +0200203 PyObject *_PyCFunctionFast(PyObject *self,
204 PyObject *const *args,
205 Py_ssize_t nargs);
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200206
207.. c:type:: _PyCFunctionFastWithKeywords
208
209 Type of the functions used to implement Python callables in C
210 with signature :const:`METH_FASTCALL | METH_KEYWORDS`.
Petr Viktorine1becf42020-05-07 15:39:59 +0200211 The function signature is::
212
213 PyObject *_PyCFunctionFastWithKeywords(PyObject *self,
214 PyObject *const *args,
215 Py_ssize_t nargs,
216 PyObject *kwnames);
217
218.. c:type:: PyCMethod
219
220 Type of the functions used to implement Python callables in C
221 with signature :const:`METH_METHOD | METH_FASTCALL | METH_KEYWORDS`.
222 The function signature is::
223
224 PyObject *PyCMethod(PyObject *self,
225 PyTypeObject *defining_class,
226 PyObject *const *args,
227 Py_ssize_t nargs,
228 PyObject *kwnames)
229
230 .. versionadded:: 3.9
Georg Brandl54a3faa2008-01-20 09:30:57 +0000231
232
Georg Brandl60203b42010-10-06 10:11:56 +0000233.. c:type:: PyMethodDef
Georg Brandl54a3faa2008-01-20 09:30:57 +0000234
235 Structure used to describe a method of an extension type. This structure has
236 four fields:
237
Serhiy Storchaka84b8e922017-03-30 10:01:03 +0300238 +------------------+---------------+-------------------------------+
239 | Field | C Type | Meaning |
240 +==================+===============+===============================+
241 | :attr:`ml_name` | const char \* | name of the method |
242 +------------------+---------------+-------------------------------+
243 | :attr:`ml_meth` | PyCFunction | pointer to the C |
244 | | | implementation |
245 +------------------+---------------+-------------------------------+
246 | :attr:`ml_flags` | int | flag bits indicating how the |
247 | | | call should be constructed |
248 +------------------+---------------+-------------------------------+
249 | :attr:`ml_doc` | const char \* | points to the contents of the |
250 | | | docstring |
251 +------------------+---------------+-------------------------------+
Georg Brandl54a3faa2008-01-20 09:30:57 +0000252
253The :attr:`ml_meth` is a C function pointer. The functions may be of different
Victor Stinner474652f2020-08-13 22:11:50 +0200254types, but they always return :c:type:`PyObject*`. If the function is not of
Georg Brandl60203b42010-10-06 10:11:56 +0000255the :c:type:`PyCFunction`, the compiler will require a cast in the method table.
256Even though :c:type:`PyCFunction` defines the first parameter as
Victor Stinner474652f2020-08-13 22:11:50 +0200257:c:type:`PyObject*`, it is common that the method implementation uses the
Georg Brandl54a3faa2008-01-20 09:30:57 +0000258specific C type of the *self* object.
259
260The :attr:`ml_flags` field is a bitfield which can include the following flags.
261The individual flags indicate either a calling convention or a binding
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200262convention.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000263
Petr Viktorine1becf42020-05-07 15:39:59 +0200264There are these calling conventions:
Georg Brandl54a3faa2008-01-20 09:30:57 +0000265
266.. data:: METH_VARARGS
267
268 This is the typical calling convention, where the methods have the type
Victor Stinner474652f2020-08-13 22:11:50 +0200269 :c:type:`PyCFunction`. The function expects two :c:type:`PyObject*` values.
Georg Brandl21dc5ba2009-07-11 10:43:08 +0000270 The first one is the *self* object for methods; for module functions, it is
271 the module object. The second parameter (often called *args*) is a tuple
272 object representing all arguments. This parameter is typically processed
Georg Brandl60203b42010-10-06 10:11:56 +0000273 using :c:func:`PyArg_ParseTuple` or :c:func:`PyArg_UnpackTuple`.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000274
275
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200276.. data:: METH_VARARGS | METH_KEYWORDS
Georg Brandl54a3faa2008-01-20 09:30:57 +0000277
Georg Brandl60203b42010-10-06 10:11:56 +0000278 Methods with these flags must be of type :c:type:`PyCFunctionWithKeywords`.
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200279 The function expects three parameters: *self*, *args*, *kwargs* where
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200280 *kwargs* is a dictionary of all the keyword arguments or possibly ``NULL``
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200281 if there are no keyword arguments. The parameters are typically processed
282 using :c:func:`PyArg_ParseTupleAndKeywords`.
283
284
285.. data:: METH_FASTCALL
286
287 Fast calling convention supporting only positional arguments.
288 The methods have the type :c:type:`_PyCFunctionFast`.
289 The first parameter is *self*, the second parameter is a C array
Victor Stinner474652f2020-08-13 22:11:50 +0200290 of :c:type:`PyObject*` values indicating the arguments and the third
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200291 parameter is the number of arguments (the length of the array).
292
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200293 .. versionadded:: 3.7
294
Petr Viktorin0b9c4c62020-11-10 14:47:31 +0100295 .. versionchanged:: 3.10
296
297 ``METH_FASTCALL`` is now part of the stable ABI.
298
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200299
300.. data:: METH_FASTCALL | METH_KEYWORDS
301
302 Extension of :const:`METH_FASTCALL` supporting also keyword arguments,
303 with methods of type :c:type:`_PyCFunctionFastWithKeywords`.
Jeroen Demeyer9a13a382019-11-12 14:08:00 +0100304 Keyword arguments are passed the same way as in the
305 :ref:`vectorcall protocol <vectorcall>`:
Victor Stinner474652f2020-08-13 22:11:50 +0200306 there is an additional fourth :c:type:`PyObject*` parameter
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200307 which is a tuple representing the names of the keyword arguments
Jeroen Demeyer05677862019-08-16 12:41:27 +0200308 (which are guaranteed to be strings)
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200309 or possibly ``NULL`` if there are no keywords. The values of the keyword
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200310 arguments are stored in the *args* array, after the positional arguments.
311
312 This is not part of the :ref:`limited API <stable>`.
313
314 .. versionadded:: 3.7
Georg Brandl54a3faa2008-01-20 09:30:57 +0000315
316
Petr Viktorine1becf42020-05-07 15:39:59 +0200317.. data:: METH_METHOD | METH_FASTCALL | METH_KEYWORDS
318
319 Extension of :const:`METH_FASTCALL | METH_KEYWORDS` supporting the *defining
320 class*, that is, the class that contains the method in question.
321 The defining class might be a superclass of ``Py_TYPE(self)``.
322
323 The method needs to be of type :c:type:`PyCMethod`, the same as for
324 ``METH_FASTCALL | METH_KEYWORDS`` with ``defining_class`` argument added after
325 ``self``.
326
327 .. versionadded:: 3.9
328
329
Georg Brandl54a3faa2008-01-20 09:30:57 +0000330.. data:: METH_NOARGS
331
332 Methods without parameters don't need to check whether arguments are given if
333 they are listed with the :const:`METH_NOARGS` flag. They need to be of type
Georg Brandl60203b42010-10-06 10:11:56 +0000334 :c:type:`PyCFunction`. The first parameter is typically named *self* and will
Georg Brandl21dc5ba2009-07-11 10:43:08 +0000335 hold a reference to the module or object instance. In all cases the second
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200336 parameter will be ``NULL``.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000337
338
339.. data:: METH_O
340
341 Methods with a single object argument can be listed with the :const:`METH_O`
Georg Brandl60203b42010-10-06 10:11:56 +0000342 flag, instead of invoking :c:func:`PyArg_ParseTuple` with a ``"O"`` argument.
343 They have the type :c:type:`PyCFunction`, with the *self* parameter, and a
Victor Stinner474652f2020-08-13 22:11:50 +0200344 :c:type:`PyObject*` parameter representing the single argument.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000345
346
347These two constants are not used to indicate the calling convention but the
348binding when use with methods of classes. These may not be used for functions
349defined for modules. At most one of these flags may be set for any given
350method.
351
352
353.. data:: METH_CLASS
354
355 .. index:: builtin: classmethod
356
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000357 The method will be passed the type object as the first parameter rather
358 than an instance of the type. This is used to create *class methods*,
359 similar to what is created when using the :func:`classmethod` built-in
360 function.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000361
362
363.. data:: METH_STATIC
364
365 .. index:: builtin: staticmethod
366
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200367 The method will be passed ``NULL`` as the first parameter rather than an
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000368 instance of the type. This is used to create *static methods*, similar to
369 what is created when using the :func:`staticmethod` built-in function.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000370
371One other constant controls whether a method is loaded in place of another
372definition with the same method name.
373
374
375.. data:: METH_COEXIST
376
377 The method will be loaded in place of existing definitions. Without
378 *METH_COEXIST*, the default is to skip repeated definitions. Since slot
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000379 wrappers are loaded before the method table, the existence of a
380 *sq_contains* slot, for example, would generate a wrapped method named
381 :meth:`__contains__` and preclude the loading of a corresponding
382 PyCFunction with the same name. With the flag defined, the PyCFunction
383 will be loaded in place of the wrapper object and will co-exist with the
384 slot. This is helpful because calls to PyCFunctions are optimized more
385 than wrapper object calls.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000386
Georg Brandl1f01deb2009-01-03 22:47:39 +0000387
Jeroen Demeyer96699312019-09-10 12:41:59 +0200388Accessing attributes of extension types
389---------------------------------------
390
Georg Brandl60203b42010-10-06 10:11:56 +0000391.. c:type:: PyMemberDef
Georg Brandl1f01deb2009-01-03 22:47:39 +0000392
393 Structure which describes an attribute of a type which corresponds to a C
394 struct member. Its fields are:
395
Serhiy Storchaka84b8e922017-03-30 10:01:03 +0300396 +------------------+---------------+-------------------------------+
397 | Field | C Type | Meaning |
398 +==================+===============+===============================+
399 | :attr:`name` | const char \* | name of the member |
400 +------------------+---------------+-------------------------------+
401 | :attr:`!type` | int | the type of the member in the |
402 | | | C struct |
403 +------------------+---------------+-------------------------------+
404 | :attr:`offset` | Py_ssize_t | the offset in bytes that the |
405 | | | member is located on the |
406 | | | type's object struct |
407 +------------------+---------------+-------------------------------+
408 | :attr:`flags` | int | flag bits indicating if the |
409 | | | field should be read-only or |
410 | | | writable |
411 +------------------+---------------+-------------------------------+
412 | :attr:`doc` | const char \* | points to the contents of the |
413 | | | docstring |
414 +------------------+---------------+-------------------------------+
Georg Brandl1f01deb2009-01-03 22:47:39 +0000415
csabellac3c7ef02017-03-29 20:27:50 -0400416 :attr:`!type` can be one of many ``T_`` macros corresponding to various C
Georg Brandl1f01deb2009-01-03 22:47:39 +0000417 types. When the member is accessed in Python, it will be converted to the
418 equivalent Python type.
419
420 =============== ==================
421 Macro name C type
422 =============== ==================
423 T_SHORT short
424 T_INT int
425 T_LONG long
426 T_FLOAT float
427 T_DOUBLE double
Serhiy Storchaka84b8e922017-03-30 10:01:03 +0300428 T_STRING const char \*
Georg Brandl1f01deb2009-01-03 22:47:39 +0000429 T_OBJECT PyObject \*
430 T_OBJECT_EX PyObject \*
431 T_CHAR char
432 T_BYTE char
Benjamin Petersond23f8222009-04-05 19:13:16 +0000433 T_UBYTE unsigned char
Georg Brandl1f01deb2009-01-03 22:47:39 +0000434 T_UINT unsigned int
435 T_USHORT unsigned short
436 T_ULONG unsigned long
437 T_BOOL char
438 T_LONGLONG long long
439 T_ULONGLONG unsigned long long
440 T_PYSSIZET Py_ssize_t
441 =============== ==================
442
Georg Brandl60203b42010-10-06 10:11:56 +0000443 :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX` differ in that
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200444 :c:macro:`T_OBJECT` returns ``None`` if the member is ``NULL`` and
Georg Brandl60203b42010-10-06 10:11:56 +0000445 :c:macro:`T_OBJECT_EX` raises an :exc:`AttributeError`. Try to use
446 :c:macro:`T_OBJECT_EX` over :c:macro:`T_OBJECT` because :c:macro:`T_OBJECT_EX`
Ezio Melotti479def32010-01-03 09:11:59 +0000447 handles use of the :keyword:`del` statement on that attribute more correctly
Georg Brandl60203b42010-10-06 10:11:56 +0000448 than :c:macro:`T_OBJECT`.
Georg Brandl1f01deb2009-01-03 22:47:39 +0000449
Serhiy Storchaka1ecf7d22016-10-27 21:41:19 +0300450 :attr:`flags` can be ``0`` for write and read access or :c:macro:`READONLY` for
Georg Brandl60203b42010-10-06 10:11:56 +0000451 read-only access. Using :c:macro:`T_STRING` for :attr:`type` implies
Windson yang689d5552018-11-18 03:16:51 +0800452 :c:macro:`READONLY`. :c:macro:`T_STRING` data is interpreted as UTF-8.
453 Only :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX`
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200454 members can be deleted. (They are set to ``NULL``).
Michael Seifertda67e0d2017-09-15 18:25:27 +0200455
Petr Viktorin468f8a62019-09-25 13:06:16 +0200456 .. _pymemberdef-offsets:
457
458 Heap allocated types (created using :c:func:`PyType_FromSpec` or similar),
Gurupad Hegde6c7bb382019-12-28 17:16:02 -0500459 ``PyMemberDef`` may contain definitions for the special members
Hai Shi86d69442020-05-12 05:38:55 +0800460 ``__dictoffset__``, ``__weaklistoffset__`` and ``__vectorcalloffset__``,
461 corresponding to
462 :c:member:`~PyTypeObject.tp_dictoffset`,
463 :c:member:`~PyTypeObject.tp_weaklistoffset` and
464 :c:member:`~PyTypeObject.tp_vectorcall_offset` in type objects.
Petr Viktorin468f8a62019-09-25 13:06:16 +0200465 These must be defined with ``T_PYSSIZET`` and ``READONLY``, for example::
466
467 static PyMemberDef spam_type_members[] = {
468 {"__dictoffset__", T_PYSSIZET, offsetof(Spam_object, dict), READONLY},
469 {NULL} /* Sentinel */
470 };
Michael Seifertda67e0d2017-09-15 18:25:27 +0200471
472.. c:type:: PyGetSetDef
473
474 Structure to define property-like access for a type. See also description of
475 the :c:member:`PyTypeObject.tp_getset` slot.
476
477 +-------------+------------------+-----------------------------------+
478 | Field | C Type | Meaning |
479 +=============+==================+===================================+
480 | name | const char \* | attribute name |
481 +-------------+------------------+-----------------------------------+
482 | get | getter | C Function to get the attribute |
483 +-------------+------------------+-----------------------------------+
484 | set | setter | optional C function to set or |
485 | | | delete the attribute, if omitted |
486 | | | the attribute is readonly |
487 +-------------+------------------+-----------------------------------+
488 | doc | const char \* | optional docstring |
489 +-------------+------------------+-----------------------------------+
490 | closure | void \* | optional function pointer, |
491 | | | providing additional data for |
492 | | | getter and setter |
493 +-------------+------------------+-----------------------------------+
494
Victor Stinner474652f2020-08-13 22:11:50 +0200495 The ``get`` function takes one :c:type:`PyObject*` parameter (the
Michael Seifertda67e0d2017-09-15 18:25:27 +0200496 instance) and a function pointer (the associated ``closure``)::
497
498 typedef PyObject *(*getter)(PyObject *, void *);
499
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200500 It should return a new reference on success or ``NULL`` with a set exception
Michael Seifertda67e0d2017-09-15 18:25:27 +0200501 on failure.
502
Victor Stinner474652f2020-08-13 22:11:50 +0200503 ``set`` functions take two :c:type:`PyObject*` parameters (the instance and
Michael Seifertda67e0d2017-09-15 18:25:27 +0200504 the value to be set) and a function pointer (the associated ``closure``)::
505
506 typedef int (*setter)(PyObject *, PyObject *, void *);
507
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200508 In case the attribute should be deleted the second parameter is ``NULL``.
Michael Seifertda67e0d2017-09-15 18:25:27 +0200509 Should return ``0`` on success or ``-1`` with a set exception on failure.