[C++-sig] Instantiating a Python class from C++?

Peter python at cityofdreams.com
Sat Aug 28 16:33:47 CEST 2004


That worked wonderfully, thank you.

I did have to make a small change to accomadate VC++ 6:

  module_namespace["DerivedClass"]
changed to 
  module_namespace.get("DerivedClass")



> I will suppose you have access to the module namespace containing the 
> derived class. I'll call this "module_namespace". So, you can retrieve 
> the class using Boost.Python very simply :
> 
> boost::python::object cls = module_namespace["DerivedClass"]
> 
> And now, you can create the object with :
> 
> boost::python::object obj = cls();
> 
> And to get a pointer to the underlying C++ object :
> 
> MyClass* cpp_obj = extract<MyClass*>(obj);
> 
> It should work ...
> 
> Pierre
> 
> Peter a écrit :
> > Another question, and I really hope this doesn't get emailed four
> > idnetical times like my last question.  My sincere apologies in advance
> > if it does.
> > 
> > I have a C++ class with a virtual function that I want overridden in
> > Python.  I expose it to Python in the normal way:
> > 
> >   class_<MyClass>("CPP_Class", no_init)
> >     .def("vfunc", &MyClass::func);  
> > 
> > And in Python the user derives from this class overrides the virtual
> > method, e.g.:
> > 
> >   class DerivedClass(CPP_Class):
> >       def vfunc(self):
> >           #do stuff in Python
> > 
> > I want to create an instance of "DerivedClass" from C++ and assign it to
> > the base class ptr and then call the overridden Python function via the
> > virtual fn defined in the C++ base class.  So my question is; how do I,
> > from C++, create this instance of DerivedClass (assuming I know that the
> > user called it DerivedClass)?
> > 
> > Thank you very much for any help,
> > Peter
> > 
> > 
> > 
> > 
> > 
> > 
> > _______________________________________________
> > C++-sig mailing list
> > C++-sig at python.org
> > http://mail.python.org/mailman/listinfo/c++-sig
> > 
> 
> -- 
> Pierre Barbier de Reuille
> 
> INRA - UMR Cirad/Inra/Cnrs/Univ.MontpellierII AMAP
> Botanique et Bio-informatique de l'Architecture des Plantes
> TA40/PSII, Boulevard de la Lironde
> 34398 MONTPELLIER CEDEX 5, France
> 
> tel   : (33) 4 67 61 65 77    fax   : (33) 4 67 61 56 68
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig
> 
> 





More information about the Cplusplus-sig mailing list