Implementing class methods in C

Adriaan Renting renting at astron.nl
Fri Aug 19 08:54:08 CEST 2005


I think you'd need to write a C++ class that has the methods you want to implement in C++,
then wrap that with SWIG, then inherit from that, though multiple inheritance if you also need functions from a base Python class.
The PyQt people use SIP I think, instead of SWIG, might be useful to look into that too too.

Adriaan.
 
 
>>><nmichaud at jhu.edu> 08/18/05 6:42 pm >>> 
 
Nope, it still doesn't work. Anyway, that's not exactly what i want, since 
i want func2 to be accessible from all instances of Test() 
 
Naveen 
 
On Thu, 18 Aug 2005, Jeremy Moles wrote: 
 
>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 
> 
-- 
http://mail.python.org/mailman/listinfo/python-list 




More information about the Python-list mailing list