blob: 5535f42ac120acf4626a20a0d730fe76e484cfea [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
Dong-hee Naad3252b2020-05-26 01:52:54 +090065.. c:function:: PyTypeObject* Py_TYPE(const PyObject *o)
Gregory P. Smith1b244652015-04-14 11:12:53 -070066
Dong-hee Naad3252b2020-05-26 01:52:54 +090067 Get the type of the Python object *o*.
Gregory P. Smith1b244652015-04-14 11:12:53 -070068
Dong-hee Naad3252b2020-05-26 01:52:54 +090069 Return a borrowed reference.
70
71 .. versionchanged:: 3.10
72 :c:func:`Py_TYPE()` is changed to the inline static function.
73 Use :c:func:`Py_SET_TYPE()` to set an object type.
Gregory P. Smith1b244652015-04-14 11:12:53 -070074
75
Dong-hee Nad905df72020-02-14 02:37:17 +090076.. c:function:: int Py_IS_TYPE(PyObject *o, PyTypeObject *type)
77
78 Return non-zero if the object *o* type is *type*. Return zero otherwise.
79 Equivalent to: ``Py_TYPE(o) == type``.
80
81 .. versionadded:: 3.9
82
83
Victor Stinnerd2ec81a2020-02-07 09:17:07 +010084.. c:function:: void Py_SET_TYPE(PyObject *o, PyTypeObject *type)
85
86 Set the object *o* type to *type*.
87
88 .. versionadded:: 3.9
89
90
Gregory P. Smith1b244652015-04-14 11:12:53 -070091.. c:macro:: Py_REFCNT(o)
92
Zachary Waree36402a2015-07-06 23:58:12 -050093 This macro is used to access the :attr:`ob_refcnt` member of a Python
94 object.
Gregory P. Smith1b244652015-04-14 11:12:53 -070095 It expands to::
96
97 (((PyObject*)(o))->ob_refcnt)
98
99
Victor Stinnerc86a1122020-02-07 01:24:29 +0100100.. c:function:: void Py_SET_REFCNT(PyObject *o, Py_ssize_t refcnt)
101
102 Set the object *o* reference counter to *refcnt*.
103
104 .. versionadded:: 3.9
105
106
Gregory P. Smith1b244652015-04-14 11:12:53 -0700107.. c:macro:: Py_SIZE(o)
108
Zachary Waree36402a2015-07-06 23:58:12 -0500109 This macro is used to access the :attr:`ob_size` member of a Python object.
Gregory P. Smith1b244652015-04-14 11:12:53 -0700110 It expands to::
111
112 (((PyVarObject*)(o))->ob_size)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000113
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000114
Victor Stinnerb10dc3e2020-02-07 12:05:12 +0100115.. c:function:: void Py_SET_SIZE(PyVarObject *o, Py_ssize_t size)
116
Brandt Bucher968dcd92020-02-13 09:34:45 -0800117 Set the object *o* size to *size*.
Victor Stinnerb10dc3e2020-02-07 12:05:12 +0100118
119 .. versionadded:: 3.9
120
121
Georg Brandl60203b42010-10-06 10:11:56 +0000122.. c:macro:: PyObject_HEAD_INIT(type)
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000123
124 This is a macro which expands to initialization values for a new
Georg Brandl60203b42010-10-06 10:11:56 +0000125 :c:type:`PyObject` type. This macro expands to::
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000126
127 _PyObject_EXTRA_INIT
128 1, type,
129
130
Georg Brandl60203b42010-10-06 10:11:56 +0000131.. c:macro:: PyVarObject_HEAD_INIT(type, size)
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000132
133 This is a macro which expands to initialization values for a new
Georg Brandl60203b42010-10-06 10:11:56 +0000134 :c:type:`PyVarObject` type, including the :attr:`ob_size` field.
Jeroen Ruigrok van der Werven939c1782009-04-26 20:25:45 +0000135 This macro expands to::
136
137 _PyObject_EXTRA_INIT
138 1, type, size,
Georg Brandl54a3faa2008-01-20 09:30:57 +0000139
140
Jeroen Demeyer96699312019-09-10 12:41:59 +0200141Implementing functions and methods
142----------------------------------
143
Georg Brandl60203b42010-10-06 10:11:56 +0000144.. c:type:: PyCFunction
Georg Brandl54a3faa2008-01-20 09:30:57 +0000145
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000146 Type of the functions used to implement most Python callables in C.
Georg Brandl60203b42010-10-06 10:11:56 +0000147 Functions of this type take two :c:type:`PyObject\*` parameters and return
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200148 one such value. If the return value is ``NULL``, an exception shall have
149 been set. If not ``NULL``, the return value is interpreted as the return
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000150 value of the function as exposed in Python. The function must return a new
151 reference.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000152
Petr Viktorine1becf42020-05-07 15:39:59 +0200153 The function signature is::
154
155 PyObject *PyCFunction(PyObject *self,
Hai Shic068b532020-05-08 01:16:01 +0800156 PyObject *args);
Georg Brandl54a3faa2008-01-20 09:30:57 +0000157
Georg Brandl60203b42010-10-06 10:11:56 +0000158.. c:type:: PyCFunctionWithKeywords
Georg Brandl54a3faa2008-01-20 09:30:57 +0000159
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200160 Type of the functions used to implement Python callables in C
161 with signature :const:`METH_VARARGS | METH_KEYWORDS`.
Petr Viktorine1becf42020-05-07 15:39:59 +0200162 The function signature is::
163
164 PyObject *PyCFunctionWithKeywords(PyObject *self,
Hai Shic068b532020-05-08 01:16:01 +0800165 PyObject *args,
Petr Viktorine1becf42020-05-07 15:39:59 +0200166 PyObject *kwargs);
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200167
168
169.. c:type:: _PyCFunctionFast
170
171 Type of the functions used to implement Python callables in C
172 with signature :const:`METH_FASTCALL`.
Petr Viktorine1becf42020-05-07 15:39:59 +0200173 The function signature is::
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200174
Petr Viktorine1becf42020-05-07 15:39:59 +0200175 PyObject *_PyCFunctionFast(PyObject *self,
176 PyObject *const *args,
177 Py_ssize_t nargs);
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200178
179.. c:type:: _PyCFunctionFastWithKeywords
180
181 Type of the functions used to implement Python callables in C
182 with signature :const:`METH_FASTCALL | METH_KEYWORDS`.
Petr Viktorine1becf42020-05-07 15:39:59 +0200183 The function signature is::
184
185 PyObject *_PyCFunctionFastWithKeywords(PyObject *self,
186 PyObject *const *args,
187 Py_ssize_t nargs,
188 PyObject *kwnames);
189
190.. c:type:: PyCMethod
191
192 Type of the functions used to implement Python callables in C
193 with signature :const:`METH_METHOD | METH_FASTCALL | METH_KEYWORDS`.
194 The function signature is::
195
196 PyObject *PyCMethod(PyObject *self,
197 PyTypeObject *defining_class,
198 PyObject *const *args,
199 Py_ssize_t nargs,
200 PyObject *kwnames)
201
202 .. versionadded:: 3.9
Georg Brandl54a3faa2008-01-20 09:30:57 +0000203
204
Georg Brandl60203b42010-10-06 10:11:56 +0000205.. c:type:: PyMethodDef
Georg Brandl54a3faa2008-01-20 09:30:57 +0000206
207 Structure used to describe a method of an extension type. This structure has
208 four fields:
209
Serhiy Storchaka84b8e922017-03-30 10:01:03 +0300210 +------------------+---------------+-------------------------------+
211 | Field | C Type | Meaning |
212 +==================+===============+===============================+
213 | :attr:`ml_name` | const char \* | name of the method |
214 +------------------+---------------+-------------------------------+
215 | :attr:`ml_meth` | PyCFunction | pointer to the C |
216 | | | implementation |
217 +------------------+---------------+-------------------------------+
218 | :attr:`ml_flags` | int | flag bits indicating how the |
219 | | | call should be constructed |
220 +------------------+---------------+-------------------------------+
221 | :attr:`ml_doc` | const char \* | points to the contents of the |
222 | | | docstring |
223 +------------------+---------------+-------------------------------+
Georg Brandl54a3faa2008-01-20 09:30:57 +0000224
225The :attr:`ml_meth` is a C function pointer. The functions may be of different
Georg Brandl60203b42010-10-06 10:11:56 +0000226types, but they always return :c:type:`PyObject\*`. If the function is not of
227the :c:type:`PyCFunction`, the compiler will require a cast in the method table.
228Even though :c:type:`PyCFunction` defines the first parameter as
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500229:c:type:`PyObject\*`, it is common that the method implementation uses the
Georg Brandl54a3faa2008-01-20 09:30:57 +0000230specific C type of the *self* object.
231
232The :attr:`ml_flags` field is a bitfield which can include the following flags.
233The individual flags indicate either a calling convention or a binding
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200234convention.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000235
Petr Viktorine1becf42020-05-07 15:39:59 +0200236There are these calling conventions:
Georg Brandl54a3faa2008-01-20 09:30:57 +0000237
238.. data:: METH_VARARGS
239
240 This is the typical calling convention, where the methods have the type
Georg Brandl60203b42010-10-06 10:11:56 +0000241 :c:type:`PyCFunction`. The function expects two :c:type:`PyObject\*` values.
Georg Brandl21dc5ba2009-07-11 10:43:08 +0000242 The first one is the *self* object for methods; for module functions, it is
243 the module object. The second parameter (often called *args*) is a tuple
244 object representing all arguments. This parameter is typically processed
Georg Brandl60203b42010-10-06 10:11:56 +0000245 using :c:func:`PyArg_ParseTuple` or :c:func:`PyArg_UnpackTuple`.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000246
247
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200248.. data:: METH_VARARGS | METH_KEYWORDS
Georg Brandl54a3faa2008-01-20 09:30:57 +0000249
Georg Brandl60203b42010-10-06 10:11:56 +0000250 Methods with these flags must be of type :c:type:`PyCFunctionWithKeywords`.
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200251 The function expects three parameters: *self*, *args*, *kwargs* where
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200252 *kwargs* is a dictionary of all the keyword arguments or possibly ``NULL``
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200253 if there are no keyword arguments. The parameters are typically processed
254 using :c:func:`PyArg_ParseTupleAndKeywords`.
255
256
257.. data:: METH_FASTCALL
258
259 Fast calling convention supporting only positional arguments.
260 The methods have the type :c:type:`_PyCFunctionFast`.
261 The first parameter is *self*, the second parameter is a C array
262 of :c:type:`PyObject\*` values indicating the arguments and the third
263 parameter is the number of arguments (the length of the array).
264
265 This is not part of the :ref:`limited API <stable>`.
266
267 .. versionadded:: 3.7
268
269
270.. data:: METH_FASTCALL | METH_KEYWORDS
271
272 Extension of :const:`METH_FASTCALL` supporting also keyword arguments,
273 with methods of type :c:type:`_PyCFunctionFastWithKeywords`.
Jeroen Demeyer9a13a382019-11-12 14:08:00 +0100274 Keyword arguments are passed the same way as in the
275 :ref:`vectorcall protocol <vectorcall>`:
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200276 there is an additional fourth :c:type:`PyObject\*` parameter
277 which is a tuple representing the names of the keyword arguments
Jeroen Demeyer05677862019-08-16 12:41:27 +0200278 (which are guaranteed to be strings)
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200279 or possibly ``NULL`` if there are no keywords. The values of the keyword
Jeroen Demeyer5600b5e2019-06-16 19:03:23 +0200280 arguments are stored in the *args* array, after the positional arguments.
281
282 This is not part of the :ref:`limited API <stable>`.
283
284 .. versionadded:: 3.7
Georg Brandl54a3faa2008-01-20 09:30:57 +0000285
286
Petr Viktorine1becf42020-05-07 15:39:59 +0200287.. data:: METH_METHOD | METH_FASTCALL | METH_KEYWORDS
288
289 Extension of :const:`METH_FASTCALL | METH_KEYWORDS` supporting the *defining
290 class*, that is, the class that contains the method in question.
291 The defining class might be a superclass of ``Py_TYPE(self)``.
292
293 The method needs to be of type :c:type:`PyCMethod`, the same as for
294 ``METH_FASTCALL | METH_KEYWORDS`` with ``defining_class`` argument added after
295 ``self``.
296
297 .. versionadded:: 3.9
298
299
Georg Brandl54a3faa2008-01-20 09:30:57 +0000300.. data:: METH_NOARGS
301
302 Methods without parameters don't need to check whether arguments are given if
303 they are listed with the :const:`METH_NOARGS` flag. They need to be of type
Georg Brandl60203b42010-10-06 10:11:56 +0000304 :c:type:`PyCFunction`. The first parameter is typically named *self* and will
Georg Brandl21dc5ba2009-07-11 10:43:08 +0000305 hold a reference to the module or object instance. In all cases the second
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200306 parameter will be ``NULL``.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000307
308
309.. data:: METH_O
310
311 Methods with a single object argument can be listed with the :const:`METH_O`
Georg Brandl60203b42010-10-06 10:11:56 +0000312 flag, instead of invoking :c:func:`PyArg_ParseTuple` with a ``"O"`` argument.
313 They have the type :c:type:`PyCFunction`, with the *self* parameter, and a
314 :c:type:`PyObject\*` parameter representing the single argument.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000315
316
317These two constants are not used to indicate the calling convention but the
318binding when use with methods of classes. These may not be used for functions
319defined for modules. At most one of these flags may be set for any given
320method.
321
322
323.. data:: METH_CLASS
324
325 .. index:: builtin: classmethod
326
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000327 The method will be passed the type object as the first parameter rather
328 than an instance of the type. This is used to create *class methods*,
329 similar to what is created when using the :func:`classmethod` built-in
330 function.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000331
332
333.. data:: METH_STATIC
334
335 .. index:: builtin: staticmethod
336
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200337 The method will be passed ``NULL`` as the first parameter rather than an
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000338 instance of the type. This is used to create *static methods*, similar to
339 what is created when using the :func:`staticmethod` built-in function.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000340
341One other constant controls whether a method is loaded in place of another
342definition with the same method name.
343
344
345.. data:: METH_COEXIST
346
347 The method will be loaded in place of existing definitions. Without
348 *METH_COEXIST*, the default is to skip repeated definitions. Since slot
Jeroen Ruigrok van der Wervenf4a9f962009-04-26 20:21:12 +0000349 wrappers are loaded before the method table, the existence of a
350 *sq_contains* slot, for example, would generate a wrapped method named
351 :meth:`__contains__` and preclude the loading of a corresponding
352 PyCFunction with the same name. With the flag defined, the PyCFunction
353 will be loaded in place of the wrapper object and will co-exist with the
354 slot. This is helpful because calls to PyCFunctions are optimized more
355 than wrapper object calls.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000356
Georg Brandl1f01deb2009-01-03 22:47:39 +0000357
Jeroen Demeyer96699312019-09-10 12:41:59 +0200358Accessing attributes of extension types
359---------------------------------------
360
Georg Brandl60203b42010-10-06 10:11:56 +0000361.. c:type:: PyMemberDef
Georg Brandl1f01deb2009-01-03 22:47:39 +0000362
363 Structure which describes an attribute of a type which corresponds to a C
364 struct member. Its fields are:
365
Serhiy Storchaka84b8e922017-03-30 10:01:03 +0300366 +------------------+---------------+-------------------------------+
367 | Field | C Type | Meaning |
368 +==================+===============+===============================+
369 | :attr:`name` | const char \* | name of the member |
370 +------------------+---------------+-------------------------------+
371 | :attr:`!type` | int | the type of the member in the |
372 | | | C struct |
373 +------------------+---------------+-------------------------------+
374 | :attr:`offset` | Py_ssize_t | the offset in bytes that the |
375 | | | member is located on the |
376 | | | type's object struct |
377 +------------------+---------------+-------------------------------+
378 | :attr:`flags` | int | flag bits indicating if the |
379 | | | field should be read-only or |
380 | | | writable |
381 +------------------+---------------+-------------------------------+
382 | :attr:`doc` | const char \* | points to the contents of the |
383 | | | docstring |
384 +------------------+---------------+-------------------------------+
Georg Brandl1f01deb2009-01-03 22:47:39 +0000385
csabellac3c7ef02017-03-29 20:27:50 -0400386 :attr:`!type` can be one of many ``T_`` macros corresponding to various C
Georg Brandl1f01deb2009-01-03 22:47:39 +0000387 types. When the member is accessed in Python, it will be converted to the
388 equivalent Python type.
389
390 =============== ==================
391 Macro name C type
392 =============== ==================
393 T_SHORT short
394 T_INT int
395 T_LONG long
396 T_FLOAT float
397 T_DOUBLE double
Serhiy Storchaka84b8e922017-03-30 10:01:03 +0300398 T_STRING const char \*
Georg Brandl1f01deb2009-01-03 22:47:39 +0000399 T_OBJECT PyObject \*
400 T_OBJECT_EX PyObject \*
401 T_CHAR char
402 T_BYTE char
Benjamin Petersond23f8222009-04-05 19:13:16 +0000403 T_UBYTE unsigned char
Georg Brandl1f01deb2009-01-03 22:47:39 +0000404 T_UINT unsigned int
405 T_USHORT unsigned short
406 T_ULONG unsigned long
407 T_BOOL char
408 T_LONGLONG long long
409 T_ULONGLONG unsigned long long
410 T_PYSSIZET Py_ssize_t
411 =============== ==================
412
Georg Brandl60203b42010-10-06 10:11:56 +0000413 :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX` differ in that
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200414 :c:macro:`T_OBJECT` returns ``None`` if the member is ``NULL`` and
Georg Brandl60203b42010-10-06 10:11:56 +0000415 :c:macro:`T_OBJECT_EX` raises an :exc:`AttributeError`. Try to use
416 :c:macro:`T_OBJECT_EX` over :c:macro:`T_OBJECT` because :c:macro:`T_OBJECT_EX`
Ezio Melotti479def32010-01-03 09:11:59 +0000417 handles use of the :keyword:`del` statement on that attribute more correctly
Georg Brandl60203b42010-10-06 10:11:56 +0000418 than :c:macro:`T_OBJECT`.
Georg Brandl1f01deb2009-01-03 22:47:39 +0000419
Serhiy Storchaka1ecf7d22016-10-27 21:41:19 +0300420 :attr:`flags` can be ``0`` for write and read access or :c:macro:`READONLY` for
Georg Brandl60203b42010-10-06 10:11:56 +0000421 read-only access. Using :c:macro:`T_STRING` for :attr:`type` implies
Windson yang689d5552018-11-18 03:16:51 +0800422 :c:macro:`READONLY`. :c:macro:`T_STRING` data is interpreted as UTF-8.
423 Only :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX`
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200424 members can be deleted. (They are set to ``NULL``).
Michael Seifertda67e0d2017-09-15 18:25:27 +0200425
Petr Viktorin468f8a62019-09-25 13:06:16 +0200426 .. _pymemberdef-offsets:
427
428 Heap allocated types (created using :c:func:`PyType_FromSpec` or similar),
Gurupad Hegde6c7bb382019-12-28 17:16:02 -0500429 ``PyMemberDef`` may contain definitions for the special members
Hai Shi86d69442020-05-12 05:38:55 +0800430 ``__dictoffset__``, ``__weaklistoffset__`` and ``__vectorcalloffset__``,
431 corresponding to
432 :c:member:`~PyTypeObject.tp_dictoffset`,
433 :c:member:`~PyTypeObject.tp_weaklistoffset` and
434 :c:member:`~PyTypeObject.tp_vectorcall_offset` in type objects.
Petr Viktorin468f8a62019-09-25 13:06:16 +0200435 These must be defined with ``T_PYSSIZET`` and ``READONLY``, for example::
436
437 static PyMemberDef spam_type_members[] = {
438 {"__dictoffset__", T_PYSSIZET, offsetof(Spam_object, dict), READONLY},
439 {NULL} /* Sentinel */
440 };
Michael Seifertda67e0d2017-09-15 18:25:27 +0200441
442.. c:type:: PyGetSetDef
443
444 Structure to define property-like access for a type. See also description of
445 the :c:member:`PyTypeObject.tp_getset` slot.
446
447 +-------------+------------------+-----------------------------------+
448 | Field | C Type | Meaning |
449 +=============+==================+===================================+
450 | name | const char \* | attribute name |
451 +-------------+------------------+-----------------------------------+
452 | get | getter | C Function to get the attribute |
453 +-------------+------------------+-----------------------------------+
454 | set | setter | optional C function to set or |
455 | | | delete the attribute, if omitted |
456 | | | the attribute is readonly |
457 +-------------+------------------+-----------------------------------+
458 | doc | const char \* | optional docstring |
459 +-------------+------------------+-----------------------------------+
460 | closure | void \* | optional function pointer, |
461 | | | providing additional data for |
462 | | | getter and setter |
463 +-------------+------------------+-----------------------------------+
464
465 The ``get`` function takes one :c:type:`PyObject\*` parameter (the
466 instance) and a function pointer (the associated ``closure``)::
467
468 typedef PyObject *(*getter)(PyObject *, void *);
469
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200470 It should return a new reference on success or ``NULL`` with a set exception
Michael Seifertda67e0d2017-09-15 18:25:27 +0200471 on failure.
472
473 ``set`` functions take two :c:type:`PyObject\*` parameters (the instance and
474 the value to be set) and a function pointer (the associated ``closure``)::
475
476 typedef int (*setter)(PyObject *, PyObject *, void *);
477
Serhiy Storchaka25fc0882019-10-30 12:03:20 +0200478 In case the attribute should be deleted the second parameter is ``NULL``.
Michael Seifertda67e0d2017-09-15 18:25:27 +0200479 Should return ``0`` on success or ``-1`` with a set exception on failure.