I honestly don't know the answer to this and I am entirely guessing but--does it work without using the new module? That is:
---------------------------------------------------------------- import _test class Foo: pass foo = Foo() foo.bar = _test.func2 foo.bar() On Thu, 2005-08-18 at 12:09 -0400, [EMAIL PROTECTED] wrote: > I am having a problem implementing some methods of a python class in C. > The class is defined in python, but I would like to rewrite some methods > in c. Here is an example of what I want to do: > > file _test.c: > > #include <Python.h> > > static PyObject * > func2(PyObject *self, PyObject *args) > { > if (self == NULL) { > PyErr_SetString(PyExc_SystemError, "self is NULL"); > return NULL; > } > > // Parse arguments > if (!PyArg_ParseTuple(args, "")) > { > return NULL; > } > > Py_INCREF(Py_None); > return Py_None; > } > > static PyMethodDef TestMethods[] = { > {"func2", func2, METH_VARARGS, "func2."}, > {NULL, NULL, 0, NULL} /* Sentinel */ > }; > > PyMODINIT_FUNC > init_test(void) > { > (void) Py_InitModule("_test", TestMethods); > } > > ---------------------------------------------------- > test.py: > > class Test: > def func1(self): > print "I am in func 1" > > import _test > import new > Test.func2 = new.instancemethod(_test.func2, None, Test) > del(new) > > t = Test() > t.func2() > > > When I run test.py, I get a SystemError exception (which is what I raise > if self is NULL). I think my confusion lies in the use of PyObject* self > in the function declaration. Shouldn't this be set to point to the > instance of class Test that I am calling it from? Am I misunderstanding > the purpose of PyObject* self? Thanks. > > Naveen > > --------------------------------------------------------------------- > Naveen Michaud-Agrawal > Program in Molecular Biophysics > Johns Hopkins University > (410) 614 4435 -- http://mail.python.org/mailman/listinfo/python-list