Implementing class methods in C

nmichaud at jhu.edu nmichaud at jhu.edu
Thu Aug 18 12:09:46 EDT 2005


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