]> granicus.if.org Git - python/commitdiff
#970783: document PyObject_Generic[GS]etAttr.
authorGeorg Brandl <georg@python.org>
Tue, 31 Mar 2009 17:13:06 +0000 (17:13 +0000)
committerGeorg Brandl <georg@python.org>
Tue, 31 Mar 2009 17:13:06 +0000 (17:13 +0000)
Doc/c-api/object.rst

index c5dccf925ab72137bc8d2303f64edf0de322c90c..388c2ae24249da3bfc4849f86bfdedcfa264aed4 100644 (file)
@@ -42,6 +42,16 @@ Object Protocol
    expression ``o.attr_name``.
 
 
+.. cfunction:: PyObject* PyObject_GenericGetAttr(PyObject *o, PyObject *name)
+
+   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.
+
+
 .. cfunction:: int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)
 
    Set the value of the attribute named *attr_name*, for object *o*, to the value
@@ -56,6 +66,17 @@ Object Protocol
    ``o.attr_name = v``.
 
 
+.. cfunction:: int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject
+*value)
+
+   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.
+
+
 .. cfunction:: int PyObject_DelAttr(PyObject *o, PyObject *attr_name)
 
    Delete attribute named *attr_name*, for object *o*. Returns ``-1`` on failure.