Implementing class methods in C
Jeremy Moles
jeremy at emperorlinux.com
Thu Aug 18 12:21:56 EDT 2005
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