[Python-Dev] Python memory model (low level)

"Martin v. Löwis" martin at v.loewis.de
Fri Jun 30 22:30:47 CEST 2006


Tim Peters wrote:
> Don't know what "raw data" might mean here.  Any Python object can be
> bound to any attribute of a class.  In Python, e.g.,
> 
> class MyClass:
> 
>      mydata = ['xyz', 12]
> 
>      def method(self):
>          MyClass.mydata.append(-1)
>          # or, more inheritance-friendly
>          self.__class__.mydata.append(-1)
> 
> This is substantially more long-winded in C.

To get a starting point:
PyDict_GetItemString(MyClass->tp_dict, "mydata")
is the equivalent of
self.__class__.mydata

That way, the raw data would get exposed to the Python level.
If you don't want this to happen, you could also revert the
lookup:

static PyObject *mydata; /* = PyDict_New() */
and then
PyDict_GetItem(mydata, MyClass)

If "raw" means "non-PyObject", you would have to wrap the
raw data pointer with a CObject first.

Regards,
Martin


More information about the Python-Dev mailing list