Nope, it still doesn't work. Anyway, that's not exactly what i want, since i want func2 to be accessible from all instances of Test()
Naveen On Thu, 18 Aug 2005, Jeremy Moles wrote: > 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