Implementing class methods in C

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • nmichaud@jhu.edu

    #1

    Implementing class methods in C


    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_SystemEr ror, "self is NULL");
    return NULL;
    }

    // Parse arguments
    if (!PyArg_ParseTu ple(args, ""))
    {
    return NULL;
    }

    Py_INCREF(Py_No ne);
    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.instancemet hod(_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 misunderstandin g
    the purpose of PyObject* self? Thanks.

    Naveen

    ---------------------------------------------------------------------
    Naveen Michaud-Agrawal
    Program in Molecular Biophysics
    Johns Hopkins University
    (410) 614 4435
Working...