Implementing class methods in C

Jeremy Moles jeremy at emperorlinux.com
Thu Aug 18 18:21:56 CEST 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