PyObject_SetAttrString - doesn't set instance attribute
Jason
jason.heeris at gmail.com
Sat May 1 07:04:09 EDT 2010
I'm having a bit of trouble with C/Python bindings. Particularly,
trying to set an instance variable from C when the object is
initialised using PyObject_SetAttrString, but nothing seems to happen.
The C initialisation code is:
static void
nautilus_python_object_instance_init (NautilusPythonObject *object)
{
fprintf(stderr, "nautilus_python_object_instance_init called\n");
NautilusPythonObjectClass *class;
debug_enter();
class = (NautilusPythonObjectClass*)(((GTypeInstance*)object)-
>g_class);
object->instance = PyObject_CallObject(class->type, NULL);
PyObject* test_int = PyInt_FromLong(42);
if (object->instance == NULL)
{
PyErr_Print();
}
else
{
fprintf(stderr, "Setting magic parameter\n");
fprintf(stderr, "From C: ");
PyObject_Print(object->instance, stderr, 0);
fprintf(stderr, "\n");
int retval = PyObject_SetAttrString(object->instance,
"super_happy_magic", test_int);
fprintf(stderr, "Result: %i\n", retval);
}
Py_DECREF(test_int);
}
...and the Python module contains:
class MenuProviderTest(nautilus.MenuProvider):
def __init__(self):
print "From Python: %s" % self
try:
print getattr(self, "super_happy_magic")
except AttributeError:
print "Didn't work!"
When the MenuProviderTest is created, the output is:
nautilus_python_object_instance_init called
Setting magic parameter
>From C: <MenuProvTest.MenuProviderTest object at 0x7faee6a9fcd0>
Result: 0
>From Python: <MenuProvTest.MenuProviderTest object at 0x7faee6a9fcd0>
Didn't work!
(I've tried getattr and self.super_happy_magic, with the same effect.)
Where am I going wrong?
— Jason
More information about the Python-list
mailing list