problem using C-bindings

Jack Diederich jack at performancedrivers.com
Thu Aug 19 19:21:31 EDT 2004


On Fri, Aug 20, 2004 at 12:14:05AM +0200, eq wrote:
> Am Thu, 19 Aug 2004 17:45:45 -0400 schrieb Jack Diederich:
> 
> > On Thu, Aug 19, 2004 at 10:32:15PM +0200, eq wrote:
> >> Hi,
> >> 
> >> I'm trying to create a program(written in C) that does the following
> >> things using embedded Python:
> >> 1. Create a module(say, "MyModule")
> >> 2. Create a class in that module(say, "MyClass")
> >> 3. Create a function in that module(say, "MyFunction")
> > [snip]
> >> 	class_dict=PyDict_New();
> >> 	class_name=PyString_FromString("MyClass");
> >> 	class=PyClass_New(NULL,class_dict,class_name);
> >> 	PyDict_SetItemString(module_dict,"MyClass",class);
> > [snip]
> > 
> > Take a look at Modules/xxsubtype.c in the source distribution.
> > It is an example of how to subtype a builtin.  xxmodule.c shows
> > how to make a class from scratch.  Both are out of date but a good
> > sarting spot.
> > 
> Hm, perhaps I over-complicated my problem:
> I don't need a full python-class in pure C. I just need to create a
> (python!) function(a dynamic one, not a static C function) and attach it
> to an already existing python-class just by using C-calls.
> I try to do this by compiling the function's code with:
> 
> pyfunc_code=Py_CompileString(func_code,"",Py_file_input);
> 
> where func_code could be something like "print 'hello'" and then I try to
> make a function out of this by calling:
> 
> pyfunc=PyFunction_New(pyfunc_code,dict);
> 
> where dict is the global namespace for the function.
> What I now want is to attach this function to the already created class
> "MyClass".
> 

In that case I would see how xxmodule.c exports methods in the xx_methods
array and then in your python code have the class method call that exported
method.

import xxmodule
class MyClass(object):
  def xxfunc(self, arg):
    return xxmodule.xxfunc(self.someval, arg)

In practice I've never had a class that wasn't all python or all C but
I have written small helper functions in C that are called from python.

-Jack




More information about the Python-list mailing list