1 .. highlightlang:: c 2 3 .. _common-structs: 4 5 Common Object Structures 6 ======================== 7 8 There are a large number of structures which are used in the definition of 9 object types for Python. This section describes these structures and how they 10 are used. 11 12 All Python objects ultimately share a small number of fields at the beginning 13 of the object's representation in memory. These are represented by the 14 :c:type:`PyObject` and :c:type:`PyVarObject` types, which are defined, in turn, 15 by the expansions of some macros also used, whether directly or indirectly, in 16 the definition of all other Python objects. 17 18 19 .. c:type:: PyObject 20 21 All object types are extensions of this type. This is a type which 22 contains the information Python needs to treat a pointer to an object as an 23 object. In a normal "release" build, it contains only the object's 24 reference count and a pointer to the corresponding type object. 25 Nothing is actually declared to be a :c:type:`PyObject`, but every pointer 26 to a Python object can be cast to a :c:type:`PyObject*`. Access to the 27 members must be done by using the macros :c:macro:`Py_REFCNT` and 28 :c:macro:`Py_TYPE`. 29 30 31 .. c:type:: PyVarObject 32 33 This is an extension of :c:type:`PyObject` that adds the :attr:`ob_size` 34 field. This is only used for objects that have some notion of *length*. 35 This type does not often appear in the Python/C API. 36 Access to the members must be done by using the macros 37 :c:macro:`Py_REFCNT`, :c:macro:`Py_TYPE`, and :c:macro:`Py_SIZE`. 38 39 40 .. c:macro:: PyObject_HEAD 41 42 This is a macro used when declaring new types which represent objects 43 without a varying length. The PyObject_HEAD macro expands to:: 44 45 PyObject ob_base; 46 47 See documentation of :c:type:`PyObject` above. 48 49 50 .. c:macro:: PyObject_VAR_HEAD 51 52 This is a macro used when declaring new types which represent objects 53 with a length that varies from instance to instance. 54 The PyObject_VAR_HEAD macro expands to:: 55 56 PyVarObject ob_base; 57 58 See documentation of :c:type:`PyVarObject` above. 59 60 61 .. c:macro:: Py_TYPE(o) 62 63 This macro is used to access the :attr:`ob_type` member of a Python object. 64 It expands to:: 65 66 (((PyObject*)(o))->ob_type) 67 68 69 .. c:macro:: Py_REFCNT(o) 70 71 This macro is used to access the :attr:`ob_refcnt` member of a Python 72 object. 73 It expands to:: 74 75 (((PyObject*)(o))->ob_refcnt) 76 77 78 .. c:macro:: Py_SIZE(o) 79 80 This macro is used to access the :attr:`ob_size` member of a Python object. 81 It expands to:: 82 83 (((PyVarObject*)(o))->ob_size) 84 85 86 .. c:macro:: PyObject_HEAD_INIT(type) 87 88 This is a macro which expands to initialization values for a new 89 :c:type:`PyObject` type. This macro expands to:: 90 91 _PyObject_EXTRA_INIT 92 1, type, 93 94 95 .. c:macro:: PyVarObject_HEAD_INIT(type, size) 96 97 This is a macro which expands to initialization values for a new 98 :c:type:`PyVarObject` type, including the :attr:`ob_size` field. 99 This macro expands to:: 100 101 _PyObject_EXTRA_INIT 102 1, type, size, 103 104 105 .. c:type:: PyCFunction 106 107 Type of the functions used to implement most Python callables in C. 108 Functions of this type take two :c:type:`PyObject\*` parameters and return 109 one such value. If the return value is *NULL*, an exception shall have 110 been set. If not *NULL*, the return value is interpreted as the return 111 value of the function as exposed in Python. The function must return a new 112 reference. 113 114 115 .. c:type:: PyCFunctionWithKeywords 116 117 Type of the functions used to implement Python callables in C that take 118 keyword arguments: they take three :c:type:`PyObject\*` parameters and return 119 one such value. See :c:type:`PyCFunction` above for the meaning of the return 120 value. 121 122 123 .. c:type:: PyMethodDef 124 125 Structure used to describe a method of an extension type. This structure has 126 four fields: 127 128 +------------------+---------------+-------------------------------+ 129 | Field | C Type | Meaning | 130 +==================+===============+===============================+ 131 | :attr:`ml_name` | const char \* | name of the method | 132 +------------------+---------------+-------------------------------+ 133 | :attr:`ml_meth` | PyCFunction | pointer to the C | 134 | | | implementation | 135 +------------------+---------------+-------------------------------+ 136 | :attr:`ml_flags` | int | flag bits indicating how the | 137 | | | call should be constructed | 138 +------------------+---------------+-------------------------------+ 139 | :attr:`ml_doc` | const char \* | points to the contents of the | 140 | | | docstring | 141 +------------------+---------------+-------------------------------+ 142 143 The :attr:`ml_meth` is a C function pointer. The functions may be of different 144 types, but they always return :c:type:`PyObject\*`. If the function is not of 145 the :c:type:`PyCFunction`, the compiler will require a cast in the method table. 146 Even though :c:type:`PyCFunction` defines the first parameter as 147 :c:type:`PyObject\*`, it is common that the method implementation uses the 148 specific C type of the *self* object. 149 150 The :attr:`ml_flags` field is a bitfield which can include the following flags. 151 The individual flags indicate either a calling convention or a binding 152 convention. Of the calling convention flags, only :const:`METH_VARARGS` and 153 :const:`METH_KEYWORDS` can be combined. Any of the calling convention flags 154 can be combined with a binding flag. 155 156 157 .. data:: METH_VARARGS 158 159 This is the typical calling convention, where the methods have the type 160 :c:type:`PyCFunction`. The function expects two :c:type:`PyObject\*` values. 161 The first one is the *self* object for methods; for module functions, it is 162 the module object. The second parameter (often called *args*) is a tuple 163 object representing all arguments. This parameter is typically processed 164 using :c:func:`PyArg_ParseTuple` or :c:func:`PyArg_UnpackTuple`. 165 166 167 .. data:: METH_KEYWORDS 168 169 Methods with these flags must be of type :c:type:`PyCFunctionWithKeywords`. 170 The function expects three parameters: *self*, *args*, and a dictionary of 171 all the keyword arguments. The flag must be combined with 172 :const:`METH_VARARGS`, and the parameters are typically processed using 173 :c:func:`PyArg_ParseTupleAndKeywords`. 174 175 176 .. data:: METH_NOARGS 177 178 Methods without parameters don't need to check whether arguments are given if 179 they are listed with the :const:`METH_NOARGS` flag. They need to be of type 180 :c:type:`PyCFunction`. The first parameter is typically named *self* and will 181 hold a reference to the module or object instance. In all cases the second 182 parameter will be *NULL*. 183 184 185 .. data:: METH_O 186 187 Methods with a single object argument can be listed with the :const:`METH_O` 188 flag, instead of invoking :c:func:`PyArg_ParseTuple` with a ``"O"`` argument. 189 They have the type :c:type:`PyCFunction`, with the *self* parameter, and a 190 :c:type:`PyObject\*` parameter representing the single argument. 191 192 193 These two constants are not used to indicate the calling convention but the 194 binding when use with methods of classes. These may not be used for functions 195 defined for modules. At most one of these flags may be set for any given 196 method. 197 198 199 .. data:: METH_CLASS 200 201 .. index:: builtin: classmethod 202 203 The method will be passed the type object as the first parameter rather 204 than an instance of the type. This is used to create *class methods*, 205 similar to what is created when using the :func:`classmethod` built-in 206 function. 207 208 209 .. data:: METH_STATIC 210 211 .. index:: builtin: staticmethod 212 213 The method will be passed *NULL* as the first parameter rather than an 214 instance of the type. This is used to create *static methods*, similar to 215 what is created when using the :func:`staticmethod` built-in function. 216 217 One other constant controls whether a method is loaded in place of another 218 definition with the same method name. 219 220 221 .. data:: METH_COEXIST 222 223 The method will be loaded in place of existing definitions. Without 224 *METH_COEXIST*, the default is to skip repeated definitions. Since slot 225 wrappers are loaded before the method table, the existence of a 226 *sq_contains* slot, for example, would generate a wrapped method named 227 :meth:`__contains__` and preclude the loading of a corresponding 228 PyCFunction with the same name. With the flag defined, the PyCFunction 229 will be loaded in place of the wrapper object and will co-exist with the 230 slot. This is helpful because calls to PyCFunctions are optimized more 231 than wrapper object calls. 232 233 234 .. c:type:: PyMemberDef 235 236 Structure which describes an attribute of a type which corresponds to a C 237 struct member. Its fields are: 238 239 +------------------+---------------+-------------------------------+ 240 | Field | C Type | Meaning | 241 +==================+===============+===============================+ 242 | :attr:`name` | const char \* | name of the member | 243 +------------------+---------------+-------------------------------+ 244 | :attr:`!type` | int | the type of the member in the | 245 | | | C struct | 246 +------------------+---------------+-------------------------------+ 247 | :attr:`offset` | Py_ssize_t | the offset in bytes that the | 248 | | | member is located on the | 249 | | | type's object struct | 250 +------------------+---------------+-------------------------------+ 251 | :attr:`flags` | int | flag bits indicating if the | 252 | | | field should be read-only or | 253 | | | writable | 254 +------------------+---------------+-------------------------------+ 255 | :attr:`doc` | const char \* | points to the contents of the | 256 | | | docstring | 257 +------------------+---------------+-------------------------------+ 258 259 :attr:`!type` can be one of many ``T_`` macros corresponding to various C 260 types. When the member is accessed in Python, it will be converted to the 261 equivalent Python type. 262 263 =============== ================== 264 Macro name C type 265 =============== ================== 266 T_SHORT short 267 T_INT int 268 T_LONG long 269 T_FLOAT float 270 T_DOUBLE double 271 T_STRING const char \* 272 T_OBJECT PyObject \* 273 T_OBJECT_EX PyObject \* 274 T_CHAR char 275 T_BYTE char 276 T_UBYTE unsigned char 277 T_UINT unsigned int 278 T_USHORT unsigned short 279 T_ULONG unsigned long 280 T_BOOL char 281 T_LONGLONG long long 282 T_ULONGLONG unsigned long long 283 T_PYSSIZET Py_ssize_t 284 =============== ================== 285 286 :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX` differ in that 287 :c:macro:`T_OBJECT` returns ``None`` if the member is *NULL* and 288 :c:macro:`T_OBJECT_EX` raises an :exc:`AttributeError`. Try to use 289 :c:macro:`T_OBJECT_EX` over :c:macro:`T_OBJECT` because :c:macro:`T_OBJECT_EX` 290 handles use of the :keyword:`del` statement on that attribute more correctly 291 than :c:macro:`T_OBJECT`. 292 293 :attr:`flags` can be ``0`` for write and read access or :c:macro:`READONLY` for 294 read-only access. Using :c:macro:`T_STRING` for :attr:`type` implies 295 :c:macro:`READONLY`. :c:macro:`T_STRING` data is interpreted as UTF-8. 296 Only :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX` 297 members can be deleted. (They are set to *NULL*). 298 299 300 .. c:type:: PyGetSetDef 301 302 Structure to define property-like access for a type. See also description of 303 the :c:member:`PyTypeObject.tp_getset` slot. 304 305 +-------------+------------------+-----------------------------------+ 306 | Field | C Type | Meaning | 307 +=============+==================+===================================+ 308 | name | const char \* | attribute name | 309 +-------------+------------------+-----------------------------------+ 310 | get | getter | C Function to get the attribute | 311 +-------------+------------------+-----------------------------------+ 312 | set | setter | optional C function to set or | 313 | | | delete the attribute, if omitted | 314 | | | the attribute is readonly | 315 +-------------+------------------+-----------------------------------+ 316 | doc | const char \* | optional docstring | 317 +-------------+------------------+-----------------------------------+ 318 | closure | void \* | optional function pointer, | 319 | | | providing additional data for | 320 | | | getter and setter | 321 +-------------+------------------+-----------------------------------+ 322 323 The ``get`` function takes one :c:type:`PyObject\*` parameter (the 324 instance) and a function pointer (the associated ``closure``):: 325 326 typedef PyObject *(*getter)(PyObject *, void *); 327 328 It should return a new reference on success or *NULL* with a set exception 329 on failure. 330 331 ``set`` functions take two :c:type:`PyObject\*` parameters (the instance and 332 the value to be set) and a function pointer (the associated ``closure``):: 333 334 typedef int (*setter)(PyObject *, PyObject *, void *); 335 336 In case the attribute should be deleted the second parameter is *NULL*. 337 Should return ``0`` on success or ``-1`` with a set exception on failure. 338