Implementing class methods in C

nmichaud at jhu.edu nmichaud at jhu.edu
Thu Aug 18 12:42:33 EDT 2005


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, nmichaud at jhu.edu 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
>



More information about the Python-list mailing list