Descriptor Objects
******************

"Descriptors" are objects that describe some attribute of an object.
They are found in the dictionary of type objects.

PyTypeObject PyProperty_Type
    * Part of the Stable ABI.*

   The type object for the built-in descriptor types.

PyObject *PyDescr_NewGetSet(PyTypeObject *type, struct PyGetSetDef *getset)
    *Return value: New reference.** Part of the Stable ABI.*

PyObject *PyDescr_NewMember(PyTypeObject *type, struct PyMemberDef *meth)
    *Return value: New reference.** Part of the Stable ABI.*

PyObject *PyDescr_NewMethod(PyTypeObject *type, struct PyMethodDef *meth)
    *Return value: New reference.** Part of the Stable ABI.*

PyObject *PyDescr_NewWrapper(PyTypeObject *type, struct wrapperbase *wrapper, void *wrapped)
    *Return value: New reference.*

PyObject *PyDescr_NewClassMethod(PyTypeObject *type, PyMethodDef *method)
    *Return value: New reference.** Part of the Stable ABI.*

int PyDescr_IsData(PyObject *descr)

   Return non-zero if the descriptor object *descr* describes a data
   attribute, or "0" if it describes a method.  *descr* must be a
   descriptor object; there is no error checking.

PyObject *PyWrapper_New(PyObject*, PyObject*)
    *Return value: New reference.** Part of the Stable ABI.*


Built-in descriptors
====================

PyTypeObject PySuper_Type
    * Part of the Stable ABI.*

   The type object for super objects. This is the same object as
   "super" in the Python layer.

PyTypeObject PyClassMethod_Type

   The type of class method objects. This is the same object as
   "classmethod" in the Python layer.

PyObject *PyClassMethod_New(PyObject *callable)

   Create a new "classmethod" object wrapping *callable*. *callable*
   must be a callable object and must not be "NULL".

   On success, this function returns a *strong reference* to a new
   class method descriptor. On failure, this function returns "NULL"
   with an exception set.

PyTypeObject PyStaticMethod_Type

   The type of static method objects. This is the same object as
   "staticmethod" in the Python layer.

PyObject *PyStaticMethod_New(PyObject *callable)

   Create a new "staticmethod" object wrapping *callable*. *callable*
   must be a callable object and must not be "NULL".

   On success, this function returns a *strong reference* to a new
   static method descriptor. On failure, this function returns "NULL"
   with an exception set.
