summaryrefslogtreecommitdiffstats
path: root/Doc/c-api/object.rst
diff options
context:
space:
mode:
Diffstat (limited to 'Doc/c-api/object.rst')
-rw-r--r--Doc/c-api/object.rst306
1 files changed, 181 insertions, 125 deletions
diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst
index ca9db1a..295a129 100644
--- a/Doc/c-api/object.rst
+++ b/Doc/c-api/object.rst
@@ -1,4 +1,4 @@
-.. highlight:: c
+.. highlightlang:: c
.. _object:
@@ -6,19 +6,6 @@ Object Protocol
===============
-.. c:var:: PyObject* Py_NotImplemented
-
- The ``NotImplemented`` singleton, used to signal that an operation is
- not implemented for the given type combination.
-
-
-.. c:macro:: Py_RETURN_NOTIMPLEMENTED
-
- Properly handle returning :c:data:`Py_NotImplemented` from within a C
- function (that is, increment the reference count of NotImplemented and
- return it).
-
-
.. c:function:: int PyObject_Print(PyObject *o, FILE *fp, int flags)
Print an object *o*, on file *fp*. Returns ``-1`` on error. The flags argument
@@ -33,10 +20,6 @@ Object Protocol
is equivalent to the Python expression ``hasattr(o, attr_name)``. This function
always succeeds.
- Note that exceptions which occur while calling :meth:`__getattr__` and
- :meth:`__getattribute__` methods will get suppressed.
- To get error reporting use :c:func:`PyObject_GetAttr()` instead.
-
.. c:function:: int PyObject_HasAttrString(PyObject *o, const char *attr_name)
@@ -44,23 +27,18 @@ Object Protocol
is equivalent to the Python expression ``hasattr(o, attr_name)``. This function
always succeeds.
- Note that exceptions which occur while calling :meth:`__getattr__` and
- :meth:`__getattribute__` methods and creating a temporary string object
- will get suppressed.
- To get error reporting use :c:func:`PyObject_GetAttrString()` instead.
-
.. c:function:: PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name)
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
+ value on success, or *NULL* on failure. This is the equivalent of the Python
expression ``o.attr_name``.
.. c:function:: PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name)
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
+ value on success, or *NULL* on failure. This is the equivalent of the Python
expression ``o.attr_name``.
@@ -81,7 +59,7 @@ Object Protocol
return ``0`` on success. This is the equivalent of the Python statement
``o.attr_name = v``.
- If *v* is ``NULL``, the attribute is deleted, however this feature is
+ If *v* is *NULL*, the attribute is deleted, however this feature is
deprecated in favour of using :c:func:`PyObject_DelAttr`.
@@ -92,7 +70,7 @@ Object Protocol
return ``0`` on success. This is the equivalent of the Python statement
``o.attr_name = v``.
- If *v* is ``NULL``, the attribute is deleted, however this feature is
+ If *v* is *NULL*, the attribute is deleted, however this feature is
deprecated in favour of using :c:func:`PyObject_DelAttrString`.
@@ -120,22 +98,6 @@ Object Protocol
This is the equivalent of the Python statement ``del o.attr_name``.
-.. c:function:: PyObject* PyObject_GenericGetDict(PyObject *o, void *context)
-
- A generic implementation for the getter of a ``__dict__`` descriptor. It
- creates the dictionary if necessary.
-
- .. versionadded:: 3.3
-
-
-.. c:function:: int PyObject_GenericSetDict(PyObject *o, void *context)
-
- A generic implementation for the setter of a ``__dict__`` descriptor. This
- implementation does not allow the dictionary to be deleted.
-
- .. versionadded:: 3.3
-
-
.. c:function:: PyObject* PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)
Compare the values of *o1* and *o2* using the operation specified by *opid*,
@@ -143,7 +105,7 @@ Object Protocol
: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.
+ to *opid*. Returns the value of the comparison on success, or *NULL* on failure.
.. c:function:: int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)
@@ -160,113 +122,203 @@ Object Protocol
If *o1* and *o2* are the same object, :c:func:`PyObject_RichCompareBool`
will always return ``1`` for :const:`Py_EQ` and ``0`` for :const:`Py_NE`.
-.. c:function:: PyObject* PyObject_Repr(PyObject *o)
+.. c:function:: int PyObject_Cmp(PyObject *o1, PyObject *o2, int *result)
- .. index:: builtin: repr
+ .. index:: builtin: cmp
- 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.
+ 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)``.
- .. versionchanged:: 3.4
- This function now includes a debug assertion to help ensure that it
- does not silently discard an active exception.
-.. c:function:: PyObject* PyObject_ASCII(PyObject *o)
+.. c:function:: int PyObject_Compare(PyObject *o1, PyObject *o2)
- .. index:: builtin: ascii
+ .. index:: builtin: cmp
- As :c:func:`PyObject_Repr`, compute a string representation of object *o*, but
- escape the non-ASCII characters in the string returned by
- :c:func:`PyObject_Repr` with ``\x``, ``\u`` or ``\U`` escapes. This generates
- a string similar to that returned by :c:func:`PyObject_Repr` in Python 2.
- Called by the :func:`ascii` built-in function.
+ 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
+ :c:func:`PyErr_Occurred` to detect an error. This is equivalent to the Python
+ expression ``cmp(o1, o2)``.
- .. index:: string; PyObject_Str (C function)
+.. c:function:: PyObject* PyObject_Repr(PyObject *o)
-.. c:function:: PyObject* PyObject_Str(PyObject *o)
+ .. 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 ``str(o)``. Called by the :func:`str` built-in function
- and, therefore, by the :func:`print` function.
+ 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.
+
+
+.. c:function:: PyObject* PyObject_Str(PyObject *o)
+
+ .. index:: builtin: str
- .. versionchanged:: 3.4
- This function now includes a debug assertion to help ensure that it
- does not silently discard an active exception.
+ 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.
.. c:function:: PyObject* PyObject_Bytes(PyObject *o)
.. index:: builtin: bytes
- Compute a bytes representation of object *o*. ``NULL`` is returned on
- failure and a bytes object on success. This is equivalent to the Python
- expression ``bytes(o)``, when *o* is not an integer. Unlike ``bytes(o)``,
- a TypeError is raised when *o* is an integer instead of a zero-initialized
- bytes object.
+ Compute a bytes representation of object *o*. In 2.x, this is just an alias
+ for :c:func:`PyObject_Str`.
+
+
+.. c:function:: PyObject* PyObject_Unicode(PyObject *o)
+
+ .. 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.
+
+
+.. c:function:: int PyObject_IsInstance(PyObject *inst, PyObject *cls)
+
+ 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
+ *cls* is a type object rather than a class object, :c:func:`PyObject_IsInstance`
+ 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:`~instance.__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
+*A*, if *A* is *B*, :c:func:`PyObject_IsSubclass` returns true. If *A* and *B*
+are different objects, *B*'s :attr:`~class.__bases__` attribute is searched in
+a depth-first fashion for *A* --- the presence of the :attr:`~class.__bases__`
+attribute is considered sufficient for this determination.
.. c:function:: int PyObject_IsSubclass(PyObject *derived, PyObject *cls)
- Return ``1`` if the class *derived* is identical to or derived from the class
- *cls*, otherwise return ``0``. In case of an error, return ``-1``.
+ 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.
- 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``.
+ .. versionadded:: 2.1
- If *cls* has a :meth:`~class.__subclasscheck__` method, it will be called to
- determine the subclass status as described in :pep:`3119`. Otherwise,
- *derived* is a subclass of *cls* if it is a direct or indirect subclass,
- i.e. contained in ``cls.__mro__``.
+ .. versionchanged:: 2.3
+ Older versions of Python did not support a tuple as the second argument.
- Normally only class objects, i.e. instances of :class:`type` or a derived
- class, are considered classes. However, objects can override this by having
- a :attr:`__bases__` attribute (which must be a tuple of base classes).
+.. c:function:: int PyCallable_Check(PyObject *o)
-.. c:function:: int PyObject_IsInstance(PyObject *inst, PyObject *cls)
+ Determine if the object *o* is callable. Return ``1`` if the object is callable
+ and ``0`` otherwise. This function always succeeds.
+
+
+.. c:function:: PyObject* PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw)
+
+ .. 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
+
+
+.. c:function:: PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args)
+
+ .. 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)``.
+
+
+.. c:function:: PyObject* PyObject_CallFunction(PyObject *callable, char *format, ...)
+
+ .. index:: builtin: apply
- Return ``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.
+ Call a callable Python object *callable*, with a variable number of C arguments.
+ The C arguments are described using a :c:func:`Py_BuildValue` style format
+ 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
+ ``callable(*args)``. Note that if you only pass :c:type:`PyObject \*` args,
+ :c:func:`PyObject_CallFunctionObjArgs` is a faster alternative.
- 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 *cls* has a :meth:`~class.__instancecheck__` method, it will be called to
- determine the subclass status as described in :pep:`3119`. Otherwise, *inst*
- is an instance of *cls* if its class is a subclass of *cls*.
+.. c:function:: PyObject* PyObject_CallMethod(PyObject *o, char *method, char *format, ...)
- An instance *inst* can override what is considered its class by having a
- :attr:`__class__` attribute.
+ Call the method named *method* of object *o* with a variable number of C
+ arguments. The C arguments are described by a :c:func:`Py_BuildValue` format
+ 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)``.
+ Note that if you only pass :c:type:`PyObject \*` args,
+ :c:func:`PyObject_CallMethodObjArgs` is a faster alternative.
- An object *cls* can override if it is considered a class, and what its base
- classes are, by having a :attr:`__bases__` attribute (which must be a tuple
- of base classes).
+.. c:function:: PyObject* PyObject_CallFunctionObjArgs(PyObject *callable, ..., NULL)
-.. c:function:: Py_hash_t PyObject_Hash(PyObject *o)
+ Call a callable Python object *callable*, with a variable number of
+ :c:type:`PyObject\*` arguments. The arguments are provided as a variable number
+ of parameters followed by *NULL*. Returns the result of the call on success, or
+ *NULL* on failure.
+
+ .. versionadded:: 2.2
+
+
+.. c:function:: PyObject* PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, ..., NULL)
+
+ 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
+ :c:type:`PyObject\*` arguments. The arguments are provided as a variable number
+ of parameters followed by *NULL*. Returns the result of the call on success, or
+ *NULL* on failure.
+
+ .. versionadded:: 2.2
+
+
+.. c:function:: long PyObject_Hash(PyObject *o)
.. 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)``.
- .. versionchanged:: 3.2
- The return type is now Py_hash_t. This is a signed integer the same size
- as Py_ssize_t.
-
-.. c:function:: Py_hash_t PyObject_HashNotImplemented(PyObject *o)
+.. c:function:: long PyObject_HashNotImplemented(PyObject *o)
Set a :exc:`TypeError` indicating that ``type(o)`` is not hashable and return ``-1``.
This function receives special treatment when stored in a ``tp_hash`` slot,
allowing a type to explicitly indicate to the interpreter that it is not
hashable.
+ .. versionadded:: 2.6
+
.. c:function:: int PyObject_IsTrue(PyObject *o)
@@ -286,8 +338,8 @@ Object Protocol
.. 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
+ 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
@@ -298,11 +350,13 @@ Object Protocol
.. c:function:: int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)
Return true if the object *o* is of type *type* or a subtype of *type*. Both
- parameters must be non-``NULL``.
+ parameters must be non-*NULL*.
+
+ .. versionadded:: 2.2
-.. c:function:: Py_ssize_t PyObject_Size(PyObject *o)
- Py_ssize_t PyObject_Length(PyObject *o)
+.. c:function:: Py_ssize_t PyObject_Length(PyObject *o)
+ Py_ssize_t PyObject_Size(PyObject *o)
.. index:: builtin: len
@@ -310,20 +364,14 @@ Object Protocol
and mapping protocols, the sequence length is returned. On error, ``-1`` is
returned. This is the equivalent to the Python expression ``len(o)``.
-
-.. c:function:: Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t default)
-
- Return an estimated length for the object *o*. First try to return its
- actual length, then an estimate using :meth:`~object.__length_hint__`, and
- finally return the default value. On error return ``-1``. This is the
- equivalent to the Python expression ``operator.length_hint(o, default)``.
-
- .. versionadded:: 3.4
+ .. versionchanged:: 2.5
+ These functions returned an :c:type:`int` type. This might require
+ changes in your code for properly supporting 64-bit systems.
.. c:function:: PyObject* PyObject_GetItem(PyObject *o, PyObject *key)
- Return element of *o* corresponding to the object *key* or ``NULL`` on failure.
+ Return element of *o* corresponding to the object *key* or *NULL* on failure.
This is the equivalent of the Python expression ``o[key]``.
@@ -336,22 +384,30 @@ Object Protocol
.. c:function:: int PyObject_DelItem(PyObject *o, PyObject *key)
- Remove the mapping for the object *key* from the object *o*. Return ``-1``
- on failure. This is equivalent to the Python statement ``del o[key]``.
+ Delete the mapping for *key* from *o*. Returns ``-1`` on failure. This is the
+ equivalent of the Python statement ``del o[key]``.
+
+
+.. c:function:: int PyObject_AsFileDescriptor(PyObject *o)
+
+ 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.
.. c:function:: PyObject* PyObject_Dir(PyObject *o)
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()``,
+ 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
- is active then ``NULL`` is returned but :c:func:`PyErr_Occurred` will return false.
+ is active then *NULL* is returned but :c:func:`PyErr_Occurred` will return false.
.. c:function:: PyObject* PyObject_GetIter(PyObject *o)
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
+ an iterator. Raises :exc:`TypeError` and returns *NULL* if the object cannot be
iterated.