object.rst 16.5 KB
Newer Older
1 2 3 4 5 6 7 8
.. highlightlang:: c

.. _object:

Object Protocol
===============


9
.. c:function:: int PyObject_Print(PyObject *o, FILE *fp, int flags)
10 11 12 13 14 15 16

   Print an object *o*, on file *fp*.  Returns ``-1`` on error.  The flags argument
   is used to enable certain printing options.  The only option currently supported
   is :const:`Py_PRINT_RAW`; if given, the :func:`str` of the object is written
   instead of the :func:`repr`.


17
.. c:function:: int PyObject_HasAttr(PyObject *o, PyObject *attr_name)
18 19 20 21 22 23

   Returns ``1`` if *o* has the attribute *attr_name*, and ``0`` otherwise.  This
   is equivalent to the Python expression ``hasattr(o, attr_name)``.  This function
   always succeeds.


24
.. c:function:: int PyObject_HasAttrString(PyObject *o, const char *attr_name)
25 26 27 28 29 30

   Returns ``1`` if *o* has the attribute *attr_name*, and ``0`` otherwise.  This
   is equivalent to the Python expression ``hasattr(o, attr_name)``.  This function
   always succeeds.


31
.. c:function:: PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name)
32 33 34 35 36 37

   Retrieve an attribute named *attr_name* from object *o*. Returns the attribute
   value on success, or *NULL* on failure.  This is the equivalent of the Python
   expression ``o.attr_name``.


38
.. c:function:: PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name)
39 40 41 42 43 44

   Retrieve an attribute named *attr_name* from object *o*. Returns the attribute
   value on success, or *NULL* on failure. This is the equivalent of the Python
   expression ``o.attr_name``.


45
.. c:function:: PyObject* PyObject_GenericGetAttr(PyObject *o, PyObject *name)
46 47 48 49 50 51 52 53 54

   Generic attribute getter function that is meant to be put into a type
   object's ``tp_getattro`` slot.  It looks for a descriptor in the dictionary
   of classes in the object's MRO as well as an attribute in the object's
   :attr:`__dict__` (if present).  As outlined in :ref:`descriptors`, data
   descriptors take preference over instance attributes, while non-data
   descriptors don't.  Otherwise, an :exc:`AttributeError` is raised.


55
.. c:function:: int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)
56 57 58 59 60 61

   Set the value of the attribute named *attr_name*, for object *o*, to the value
   *v*. Returns ``-1`` on failure.  This is the equivalent of the Python statement
   ``o.attr_name = v``.


62
.. c:function:: int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)
63 64 65 66 67 68

   Set the value of the attribute named *attr_name*, for object *o*, to the value
   *v*. Returns ``-1`` on failure.  This is the equivalent of the Python statement
   ``o.attr_name = v``.


69
.. c:function:: int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)
70 71 72 73 74 75 76 77 78

   Generic attribute setter function that is meant to be put into a type
   object's ``tp_setattro`` slot.  It looks for a data descriptor in the
   dictionary of classes in the object's MRO, and if found it takes preference
   over setting the attribute in the instance dictionary. Otherwise, the
   attribute is set in the object's :attr:`__dict__` (if present).  Otherwise,
   an :exc:`AttributeError` is raised and ``-1`` is returned.


79
.. c:function:: int PyObject_DelAttr(PyObject *o, PyObject *attr_name)
80 81 82 83 84

   Delete attribute named *attr_name*, for object *o*. Returns ``-1`` on failure.
   This is the equivalent of the Python statement ``del o.attr_name``.


85
.. c:function:: int PyObject_DelAttrString(PyObject *o, const char *attr_name)
86 87 88 89 90

   Delete attribute named *attr_name*, for object *o*. Returns ``-1`` on failure.
   This is the equivalent of the Python statement ``del o.attr_name``.


91
.. c:function:: PyObject* PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)
92 93 94 95 96 97 98 99 100

   Compare the values of *o1* and *o2* using the operation specified by *opid*,
   which must be one of :const:`Py_LT`, :const:`Py_LE`, :const:`Py_EQ`,
   :const:`Py_NE`, :const:`Py_GT`, or :const:`Py_GE`, corresponding to ``<``,
   ``<=``, ``==``, ``!=``, ``>``, or ``>=`` respectively. This is the equivalent of
   the Python expression ``o1 op o2``, where ``op`` is the operator corresponding
   to *opid*. Returns the value of the comparison on success, or *NULL* on failure.


101
.. c:function:: int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)
102 103 104 105 106 107 108 109 110

   Compare the values of *o1* and *o2* using the operation specified by *opid*,
   which must be one of :const:`Py_LT`, :const:`Py_LE`, :const:`Py_EQ`,
   :const:`Py_NE`, :const:`Py_GT`, or :const:`Py_GE`, corresponding to ``<``,
   ``<=``, ``==``, ``!=``, ``>``, or ``>=`` respectively. Returns ``-1`` on error,
   ``0`` if the result is false, ``1`` otherwise. This is the equivalent of the
   Python expression ``o1 op o2``, where ``op`` is the operator corresponding to
   *opid*.

111
.. note::
112
   If *o1* and *o2* are the same object, :c:func:`PyObject_RichCompareBool`
113
   will always return ``1`` for :const:`Py_EQ` and ``0`` for :const:`Py_NE`.
114

115
.. c:function:: int PyObject_Cmp(PyObject *o1, PyObject *o2, int *result)
116 117 118 119 120 121 122 123 124

   .. index:: builtin: cmp

   Compare the values of *o1* and *o2* using a routine provided by *o1*, if one
   exists, otherwise with a routine provided by *o2*.  The result of the comparison
   is returned in *result*.  Returns ``-1`` on failure.  This is the equivalent of
   the Python statement ``result = cmp(o1, o2)``.


125
.. c:function:: int PyObject_Compare(PyObject *o1, PyObject *o2)
126 127 128 129 130 131

   .. index:: builtin: cmp

   Compare the values of *o1* and *o2* using a routine provided by *o1*, if one
   exists, otherwise with a routine provided by *o2*.  Returns the result of the
   comparison on success.  On error, the value returned is undefined; use
132
   :c:func:`PyErr_Occurred` to detect an error.  This is equivalent to the Python
133 134 135
   expression ``cmp(o1, o2)``.


136
.. c:function:: PyObject* PyObject_Repr(PyObject *o)
137 138 139 140 141 142 143 144 145

   .. index:: builtin: repr

   Compute a string representation of object *o*.  Returns the string
   representation on success, *NULL* on failure.  This is the equivalent of the
   Python expression ``repr(o)``.  Called by the :func:`repr` built-in function and
   by reverse quotes.


146
.. c:function:: PyObject* PyObject_Str(PyObject *o)
147 148 149 150 151 152 153 154 155

   .. index:: builtin: str

   Compute a string representation of object *o*.  Returns the string
   representation on success, *NULL* on failure.  This is the equivalent of the
   Python expression ``str(o)``.  Called by the :func:`str` built-in function and
   by the :keyword:`print` statement.


156
.. c:function:: PyObject* PyObject_Bytes(PyObject *o)
157 158 159 160

   .. index:: builtin: bytes

   Compute a bytes representation of object *o*.  In 2.x, this is just a alias
161
   for :c:func:`PyObject_Str`.
162 163


164
.. c:function:: PyObject* PyObject_Unicode(PyObject *o)
165 166 167 168 169 170 171 172 173

   .. index:: builtin: unicode

   Compute a Unicode string representation of object *o*.  Returns the Unicode
   string representation on success, *NULL* on failure. This is the equivalent of
   the Python expression ``unicode(o)``.  Called by the :func:`unicode` built-in
   function.


174
.. c:function:: int PyObject_IsInstance(PyObject *inst, PyObject *cls)
175 176 177

   Returns ``1`` if *inst* is an instance of the class *cls* or a subclass of
   *cls*, or ``0`` if not.  On error, returns ``-1`` and sets an exception.  If
178
   *cls* is a type object rather than a class object, :c:func:`PyObject_IsInstance`
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
   returns ``1`` if *inst* is of type *cls*.  If *cls* is a tuple, the check will
   be done against every entry in *cls*. The result will be ``1`` when at least one
   of the checks returns ``1``, otherwise it will be ``0``. If *inst* is not a
   class instance and *cls* is neither a type object, nor a class object, nor a
   tuple, *inst* must have a :attr:`__class__` attribute --- the class relationship
   of the value of that attribute with *cls* will be used to determine the result
   of this function.

   .. versionadded:: 2.1

   .. versionchanged:: 2.2
      Support for a tuple as the second argument added.

Subclass determination is done in a fairly straightforward way, but includes a
wrinkle that implementors of extensions to the class system may want to be aware
of.  If :class:`A` and :class:`B` are class objects, :class:`B` is a subclass of
:class:`A` if it inherits from :class:`A` either directly or indirectly.  If
either is not a class object, a more general mechanism is used to determine the
class relationship of the two objects.  When testing if *B* is a subclass of
198
*A*, if *A* is *B*, :c:func:`PyObject_IsSubclass` returns true.  If *A* and *B*
199 200 201 202 203
are different objects, *B*'s :attr:`__bases__` attribute is searched in a
depth-first fashion for *A* --- the presence of the :attr:`__bases__` attribute
is considered sufficient for this determination.


204
.. c:function:: int PyObject_IsSubclass(PyObject *derived, PyObject *cls)
205 206 207 208 209 210 211 212 213 214 215 216 217 218

   Returns ``1`` if the class *derived* is identical to or derived from the class
   *cls*, otherwise returns ``0``.  In case of an error, returns ``-1``. If *cls*
   is a tuple, the check will be done against every entry in *cls*. The result will
   be ``1`` when at least one of the checks returns ``1``, otherwise it will be
   ``0``. If either *derived* or *cls* is not an actual class object (or tuple),
   this function uses the generic algorithm described above.

   .. versionadded:: 2.1

   .. versionchanged:: 2.3
      Older versions of Python did not support a tuple as the second argument.


219
.. c:function:: int PyCallable_Check(PyObject *o)
220 221 222 223 224

   Determine if the object *o* is callable.  Return ``1`` if the object is callable
   and ``0`` otherwise.  This function always succeeds.


225
.. c:function:: PyObject* PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw)
226 227 228 229 230 231 232 233 234 235 236 237 238

   .. index:: builtin: apply

   Call a callable Python object *callable_object*, with arguments given by the
   tuple *args*, and named arguments given by the dictionary *kw*. If no named
   arguments are needed, *kw* may be *NULL*. *args* must not be *NULL*, use an
   empty tuple if no arguments are needed. Returns the result of the call on
   success, or *NULL* on failure.  This is the equivalent of the Python expression
   ``apply(callable_object, args, kw)`` or ``callable_object(*args, **kw)``.

   .. versionadded:: 2.2


239
.. c:function:: PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args)
240 241 242 243 244 245 246 247 248 249

   .. index:: builtin: apply

   Call a callable Python object *callable_object*, with arguments given by the
   tuple *args*.  If no arguments are needed, then *args* may be *NULL*.  Returns
   the result of the call on success, or *NULL* on failure.  This is the equivalent
   of the Python expression ``apply(callable_object, args)`` or
   ``callable_object(*args)``.


250
.. c:function:: PyObject* PyObject_CallFunction(PyObject *callable, char *format, ...)
251 252 253 254

   .. index:: builtin: apply

   Call a callable Python object *callable*, with a variable number of C arguments.
255
   The C arguments are described using a :c:func:`Py_BuildValue` style format
256 257 258
   string.  The format may be *NULL*, indicating that no arguments are provided.
   Returns the result of the call on success, or *NULL* on failure.  This is the
   equivalent of the Python expression ``apply(callable, args)`` or
259 260
   ``callable(*args)``. Note that if you only pass :c:type:`PyObject \*` args,
   :c:func:`PyObject_CallFunctionObjArgs` is a faster alternative.
261 262


263
.. c:function:: PyObject* PyObject_CallMethod(PyObject *o, char *method, char *format, ...)
264 265

   Call the method named *method* of object *o* with a variable number of C
266
   arguments.  The C arguments are described by a :c:func:`Py_BuildValue` format
267 268 269
   string that should  produce a tuple.  The format may be *NULL*, indicating that
   no arguments are provided. Returns the result of the call on success, or *NULL*
   on failure.  This is the equivalent of the Python expression ``o.method(args)``.
270 271
   Note that if you only pass :c:type:`PyObject \*` args,
   :c:func:`PyObject_CallMethodObjArgs` is a faster alternative.
272 273


274
.. c:function:: PyObject* PyObject_CallFunctionObjArgs(PyObject *callable, ..., NULL)
275 276

   Call a callable Python object *callable*, with a variable number of
277
   :c:type:`PyObject\*` arguments.  The arguments are provided as a variable number
278 279 280 281 282 283
   of parameters followed by *NULL*. Returns the result of the call on success, or
   *NULL* on failure.

   .. versionadded:: 2.2


284
.. c:function:: PyObject* PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, ..., NULL)
285 286 287

   Calls a method of the object *o*, where the name of the method is given as a
   Python string object in *name*.  It is called with a variable number of
288
   :c:type:`PyObject\*` arguments.  The arguments are provided as a variable number
289 290 291 292 293 294
   of parameters followed by *NULL*. Returns the result of the call on success, or
   *NULL* on failure.

   .. versionadded:: 2.2


295
.. c:function:: long PyObject_Hash(PyObject *o)
296 297 298 299 300 301 302

   .. index:: builtin: hash

   Compute and return the hash value of an object *o*.  On failure, return ``-1``.
   This is the equivalent of the Python expression ``hash(o)``.


303
.. c:function:: long PyObject_HashNotImplemented(PyObject *o)
304

Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
305
   Set a :exc:`TypeError` indicating that ``type(o)`` is not hashable and return ``-1``.
306
   This function receives special treatment when stored in a ``tp_hash`` slot,
Nick Coghlan's avatar
Nick Coghlan committed
307
   allowing a type to explicitly indicate to the interpreter that it is not
308 309 310 311 312
   hashable.

   .. versionadded:: 2.6


313
.. c:function:: int PyObject_IsTrue(PyObject *o)
314 315 316 317 318 319

   Returns ``1`` if the object *o* is considered to be true, and ``0`` otherwise.
   This is equivalent to the Python expression ``not not o``.  On failure, return
   ``-1``.


320
.. c:function:: int PyObject_Not(PyObject *o)
321 322 323 324 325 326

   Returns ``0`` if the object *o* is considered to be true, and ``1`` otherwise.
   This is equivalent to the Python expression ``not o``.  On failure, return
   ``-1``.


327
.. c:function:: PyObject* PyObject_Type(PyObject *o)
328 329 330 331 332 333 334 335

   .. index:: builtin: type

   When *o* is non-*NULL*, returns a type object corresponding to the object type
   of object *o*. On failure, raises :exc:`SystemError` and returns *NULL*.  This
   is equivalent to the Python expression ``type(o)``. This function increments the
   reference count of the return value. There's really no reason to use this
   function instead of the common expression ``o->ob_type``, which returns a
336
   pointer of type :c:type:`PyTypeObject\*`, except when the incremented reference
337 338 339
   count is needed.


340
.. c:function:: int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)
341 342 343 344 345 346 347

   Return true if the object *o* is of type *type* or a subtype of *type*.  Both
   parameters must be non-*NULL*.

   .. versionadded:: 2.2


348
.. c:function:: Py_ssize_t PyObject_Length(PyObject *o)
349 350 351 352 353 354 355 356
               Py_ssize_t PyObject_Size(PyObject *o)

   .. index:: builtin: len

   Return the length of object *o*.  If the object *o* provides either the sequence
   and mapping protocols, the sequence length is returned.  On error, ``-1`` is
   returned.  This is the equivalent to the Python expression ``len(o)``.

357
   .. versionchanged:: 2.5
358
      These functions returned an :c:type:`int` type. This might require
359 360
      changes in your code for properly supporting 64-bit systems.

361

362
.. c:function:: PyObject* PyObject_GetItem(PyObject *o, PyObject *key)
363 364 365 366 367

   Return element of *o* corresponding to the object *key* or *NULL* on failure.
   This is the equivalent of the Python expression ``o[key]``.


368
.. c:function:: int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)
369 370 371 372 373

   Map the object *key* to the value *v*.  Returns ``-1`` on failure.  This is the
   equivalent of the Python statement ``o[key] = v``.


374
.. c:function:: int PyObject_DelItem(PyObject *o, PyObject *key)
375 376 377 378 379

   Delete the mapping for *key* from *o*.  Returns ``-1`` on failure. This is the
   equivalent of the Python statement ``del o[key]``.


380
.. c:function:: int PyObject_AsFileDescriptor(PyObject *o)
381 382 383 384 385 386 387

   Derives a file descriptor from a Python object.  If the object is an integer or
   long integer, its value is returned.  If not, the object's :meth:`fileno` method
   is called if it exists; the method must return an integer or long integer, which
   is returned as the file descriptor value.  Returns ``-1`` on failure.


388
.. c:function:: PyObject* PyObject_Dir(PyObject *o)
389 390 391 392 393

   This is equivalent to the Python expression ``dir(o)``, returning a (possibly
   empty) list of strings appropriate for the object argument, or *NULL* if there
   was an error.  If the argument is *NULL*, this is like the Python ``dir()``,
   returning the names of the current locals; in this case, if no execution frame
394
   is active then *NULL* is returned but :c:func:`PyErr_Occurred` will return false.
395 396


397
.. c:function:: PyObject* PyObject_GetIter(PyObject *o)
398 399 400 401 402

   This is equivalent to the Python expression ``iter(o)``. It returns a new
   iterator for the object argument, or the object  itself if the object is already
   an iterator.  Raises :exc:`TypeError` and returns *NULL* if the object cannot be
   iterated.