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