Implementing class methods in C
Adriaan Renting
renting at astron.nl
Fri Aug 19 02:54:08 EDT 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