##
7.5.3 CObjects

`PyCObject`
  This subtype of `PyObject` represents an opaque value, useful for C extension modules who need to pass an opaque value (as a `void *` pointer) through Python code to other C code. It is often used to make a C function pointer defined in one module available to other modules, so the regular import mechanism can be used to access C APIs defined in dynamically loaded modules.

PyObject * `PyCObject_FromVoidPtr` (void* cobj, void (*destr)(void *))
  Creates a `PyCObject` from the `void *` cobj. The destr function will be called when the object is reclaimed, unless it is `NULL`.

PyObject * `PyCObject_FromVoidPtrAndDesc` (void* cobj, void* desc, void (*destr)(void *, void *) )
  Creates a `PyCObject` from the `void *`cobj. The destr function will be called when the object is reclaimed. The desc argument can be used to pass extra callback data for the destructor function.

void * `PyCObject_AsVoidPtr` (PyObject* self)
  Returns the object `void *` that the `PyCObject` self was created with.

void * `PyCObject_GetDesc` (PyObject* self)
  Returns the description `void *` that the `PyCObject` self was created with.