【发布时间】:2014-10-23 06:10:27
【问题描述】:
尝试使用 boost::python 向 python 公开一个简单的 C++ 多态性时,我开始感到非常沮丧。
我在 C++ 中确实有以下结构:
struct Base {
int typeID;
};
struct Derived : public Base {
int derivedProperty;
}
//and some more from base derived types....
Base *returnSomethingDerivedFromBase(...) {
Derived *ret = new Derived;
ret->derivedProperty = 1234;
return ret;
}
BOOST_PYTHON_MODULE(foo)
{
class_<Base>("Base")
.add_property("baseProperty", &Base::baseProperty);
class_<Derived, bases<Base> >("Derived")
.add_property("derivedProperty", &Derived::derivedProperty);
def("returnSomethingDerivedFromBase", returnSomethingDerivedFromBase);
}
在 Python 中,我只想拥有以下内容:
object = returnSomethingFromDerived() #object is of type Base
if object.typeID = 1:
#here i want to cast to Derived and access "derivedProperty"
#but this is not working :-( :
object.__class__ = Derived
有没有办法做到这一点?或者这不可能像在 C++ 中那样?
非常感谢您的帮助!!
【问题讨论】:
标签: python c++ boost boost-python