将C++类中的私有成员的操作函数设置为Python类中的属性
C++代码 :src.cpp
#include <iostream> #include <string> using namespace std; struct Var { Var(string name) : name(name), value() {} string const name; float value; }; class A { public: void setname(string str) { m_name = str; } string getname() { return m_name; } private: string m_name; };
python转换代码: src4py.cpp
#include <boost/python.hpp> #include "src.cpp" using namespace boost::python; BOOST_PYTHON_MODULE(test) { class_<Var>("Var", init<std::string>()) .def_readonly("name", &Var::name) //这是固定格式的写法,请注意方法名称 .def_readwrite("value", &Var::value) //这是固定格式的写法,请注意方法名称 ; //add_property 将C++类中的私有成员的操作函数设置为Python类中的属性,第一个为get 第二个为set class_<A>("A") .def("setname",&A::setname) .def("getname",&A::getname) .add_property("name",&A::getname,&A::setname) //这是固定格式的写法,请注意方法名称 ; }
上述代码编译成so的过程略,详见http://blog.csdn.net/linkyou/archive/2011/04/14/6323940.aspx
python调用代码
import test
obj = test.A() obj.setname("test") print obj.getname() print obj.name obj.name = "haha" print obj.name