在boost python中提取c++派生的类对象
Extract c++ derived class object in boost python
我正试图在python中获取c++派生的类对象,但在boost python中找不到任何帮助。问题是,我是否可以在c++中创建对象,并且该对象在python中是可访问的。
我想我可能也遇到了同样的问题。我有一个Base
类和一个Derived
类,它们都是具体的并公开给python。
class Base
{
public:
virtual ~Base() {}
};
class Derived : public Base
{};
BOOST_PYTHON_MODULE(inheritance)
{
boost::python::class_<Base>("Base") ;
boost::python::class_<Derived, boost::python::bases<Base> >("Derived") ;
}
然后,我将Derived
类的一个实例视为Base
引用,并尝试将其传递给具有正确转换类型的python。
int main()
{
Py_Initialize();
initinheritance() ;
boost::python::api::object main_module = boost::python::import("__main__");
boost::python::api::object main_namespace = main_module.attr("__dict__");
Derived derived ;
const Base& base = derived ;
// argh: 'base' is seen as python 'Base' class instance
main_namespace["base"] = base ;
boost::python::exec("print base",main_namespace) ;
// python 'var' is seen as python 'Derived' class instance
// when using C++ pointer and boost::python::ptr
main_namespace["var"] = boost::python::ptr(&base) ;
boost::python::exec("print var",main_namespace) ;
Py_Finalize();
return 0;
}
执行打印:
<inheritance.Base object at 0x0042CC70>
<inheritance.Derived object at 0x0042CC38>
我不得不使用boost::python::ptr
和一个C++指针。当Base*
指向真实的Base
对象时,它也起作用。
也许这正是你所需要的。
给定
class MyClass
{
public:
void some_method();
};
在BOOST_PYTHON_MODULE
中添加类及其方法例如
#include <boost/python.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(test)
{
class_<MyNamespace::MyClass>("MyClass")
.def("some_method", &MyNamespace::MyClass::some_method)
;
}
然后在python 中调用这些
import test
myClass = test.MyClass()
myClass.some_method()
这里有详细信息
如果你想要基类和派生类,你可以这样做:
class_<Base>("Base")
/*...*/
;
class_<Derived, bases<Base> >("Derived")
/*...*/
;
相关文章:
- 为什么此派生对象无法访问基类的后递减方法?
- 如何在新的派生对象中获取基本对象的数据?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 在没有默认构造函数的情况下创建的派生对象
- OOP 标识派生对象
- 如何创建派生对象的向量?
- 将基类分配给派生对象,反之亦然,以C++以及静态和动态对象之间的差异
- 如何从 Gtk::窗口调用派生对象的析构函数
- 无法在派生对象上运行虚拟函数
- 尝试删除指向派生对象的基指针时断言错误
- 存储在一个通用容器中的派生对象.如何避免铸造
- 将派生对象分配给函数内的基类指针
- 替换派生对象向量中的对象"no matching function to call"
- 派生对象调用的 Base 方法的模板推导
- 用于填充 Base 和派生对象的 shared_ptr 向量的函数模板
- C++ UBSAN 对派生对象产生误报
- 如何验证我是否正在使用C++中的基对象或派生对象
- C++ 构造函数和派生对象
- 将派生对象传递给模板
- 指向派生作品的基本指针,即使派生对象不存在