[C++-sig] Trying to clone Python object from C++ (again)
Paul F. Kunz
Paul_Kunz at slac.stanford.edu
Thu Jul 21 21:01:29 CEST 2005
I'm trying once again to clone a Python object whose class is
derived from an exposed C++ base class from C++. After I call from
C++ clone() on the base class pointer, I wind up here...
FunctionBase *
FunctionWrap::
clone () const
{
#ifndef HAVE_OLD_PYTHON
PyGILState_STATE state = PyGILState_Ensure ();
object py_result;
if (override clone = this->get_override("clone"))
{
try {
// The Python class author overrode clone; do
// whatever she says
py_result = clone();
}
catch ( error_already_set & e ) {
return 0;
}
}
else
(thanks to Dave for essentially writing this for me).
The problem is that the exception is thrown. The Python code looks
like...
class Linear ( FunctionBase ) :
def __init__ ( self, other = None ) :
if other : # copy constructor
FunctionBase.__init__( self, other )
else : # default constructor
FunctionBase.__init__( self )
print "default called"
self.initialize ()
def clone ( self ) :
print "clone called"
return Linear ()
Where FunctionBase is the exposed C++ class. Both print states are
executed when I call clone() from C++.
Suggestions?
More information about the Cplusplus-sig
mailing list