N
nmichaud
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
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