Python garbage collector
When wrapping up native structs, for example, it can be very tempting to follow standard C/C++ idioms and require the Python programmer to call, allocate, and release manually on different objects. This is very tedious and not very Pythonic. Cython allows us to create cdef
classes, which have extra hooks for initialization and deallocation that we can use to control all memory management of structs. These hooks are triggered automatically by the Python garbage collector, making everything nice and simple. Consider the following simple struct
:
typedef struct data { int value; } data_t;
We can then write the Cython declaration of the C struct
into PyData.pxd
as follows:
cdef extern from "Data.h": struct data: int value ctypedef data data_t
Now that we have defined the struct
, we can wrap up the struct
into a class:
cimport PyData cdef class Data(object): cdef PyData.data_t * _nativeData …
Wrapping up data into a class like this...