|
Boost Users : |
Subject: [Boost-users] Copy of a C++ object extended with Boost.Python
From: 4ian (dark4ian_at_[hidden])
Date: 2009-08-24 15:06:06
I have a simple C++ object, exposed to python with Boost.python, like
this :
-------------------------------------------------
BOOST_PYTHON_MODULE(MyModule)
{
class_<MyObject>("MyObject")...
}
-------------------------------------------------
I call then python, making an instance of MyObject accessible :
-------------------------------------------------
MyObject anInstance;
object main_module((handle<>( borrowed( PyImport_AddModule
( "__main__" ) ) ) ) );
object main_namespace = main_module.attr( "__dict__" );
object myModule( (handle<>(PyImport_ImportModule("MyModule"))) );
main_namespace["anInstance"] = ptr(&anInstance);
try
{
handle<> ignored(( PyRun_String( "anInstance.aNewMember = 1;print
anInstance.aNewMember;",
Py_file_input,
main_namespace.ptr(),
main_namespace.ptr() ) ) );
}
catch ( error_already_set )
{
PyErr_Print();
}
-------------------------------------------------
You can observe that I've added a member ( aNewMember ) to MyObject
instance.
But if I make a copy of my object :
-------------------------------------------------
MyObject anotherInstance = anInstance;
main_namespace["anotherInstance"] = ptr(&anotherInstance);
try
{
handle<> ignored(( PyRun_String( "print
anotherInstance.aNewMember;",
Py_file_input,
main_namespace.ptr(),
main_namespace.ptr() ) ) );
}
catch ( error_already_set )
{
PyErr_Print();
}
-------------------------------------------------
I have a error saying that MyObject hasn't any "aNewMember" member.
What I have added with python has not been copied/transfered.
Is there a workaround to add permanently some new members to wrapped
objects ?
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net