Accessing __slots__ from C

Hrvoje Niksic hniksic at xemacs.org
Fri Sep 12 10:01:45 EDT 2008


Chris <ceball at users.sourceforge.net> writes:

>> descr = GetAttrString(cls,"varname");
>> offset = descr->d_member->offset;
>> slotvar = (PyObject*)(((char*)obj)+offset)
>
> Unfortunately, I am inexperienced at this kind of thing, so I wasn't
> able to get something working. Maybe someone could tell me what's
> wrong with the code below (it gives the error "'struct _object' has no
> member named 'd_member'")?

You are getting that error because Carl forgot to cast the descriptor
to the appropriate C type, in this case PyMemberDescrObject.  The last
line is also incorrect, I think.  Try something like this:

  PyObject *descr = PyObject_GetAttrString(x,"attr_one");
  int offset = ((PyMemberDescrObject *) descr)->d_member->offset;
  PyObject *slotvar = *(PyObject **)(((char *) obj) + offset);



More information about the Python-list mailing list