PyInstance_New in C++ class factory

Ian Boisvert iboisver at yahoo.com
Mon Aug 30 09:10:12 CEST 2004


I'm trying to use PyInstance_New inside of a class factory to create
instances of a class that is defined in Python. I first process some
Python script that contains my class definition using the following
code:

PyObject *codeobj, *module = NULL;
codeobj = Py_CompileString(cscript, "Python script", Py_file_input);
if (codeobj != NULL)
{
	module = PyImport_ExecCodeModule("Python script", codeobj);
	if (module == NULL)
		raiseError();
}
Py_DECREF(module);
Py_DECREF(codeobj);

The call to PyImport_ExecCodeModule executes a module-scope method
that passes a class object back to the C++ code. I hold on to the
class object after incrementing it's reference count and later use it
to create instances of the class using the following code:

// create an instance of the class
PyObject *instance = PyInstance_New(classObject, NULL, NULL);
if (instance == NULL)
	raiseError();

where classObject is the class object that was passed from my Python
code back to C++.

The first time that PyInstance_New is called it works fine. The second
time it is called, it fails. I debugged the code as far as to see that
on the second call, the call to __init__ returns NULL, whereas on the
first call __init__ returns Py_None. The exception message seems to be
bogus as it mentions another method in the class that is never called.

Any suggestions as to why the second call to PyInstance_New doesn't
work would be much appreciated. Thanks.

Ian.



More information about the Python-list mailing list