在C++类中, 继承, 函数重载是重要的特征。
1. 继承
/*
继承
class_<子类, 父类>
*/
py::class_<Teacher, Person>(m, "Teacher")
.def(py::init())
PYBIND11_MODULE(demo5, m) {
m.doc() = "Simple Class";
py::class_<Person>(m, "Person")
.def(py::init())
.def(py::init<std::string, std::string, int>())
.def("setName", &Person::setName)
.def("setAge", &Person::setAge)
.def("setGender", &Person::setGender)
.def("setAddress", &Person::setAddress)
.def("setIdCardNum", &Person::setIdCardNum)
.def("getName", &Person::getName)
.def("getAge", &Person::getAge)
.def("getGender", &Person::getGender)
.def("getAddress", &Person::getAddress)
.def("getIdCardNum", &Person::getIdCardNum)
.def_static("getUniversity", &Person::getUniversity)
.def_readonly_static("university", &Person::university)
.def_readwrite("habbit", &Person::habbit)
.def_property("name", &Person::getName, &Person::setName)
.def_property("age", &Person::getAge, &Person::setAge)
.def_property("gender", &Person::getGender, &Person::setGender)
.def_property("address", &Person::getAddress, &Person::setAddress)
.def_property("idCardNum", &Person::getIdCardNum, &Person::setIdCardNum);
/*
继承
class_<子类, 父类>
*/
py::class_<Teacher, Person>(m, "Teacher")
.def(py::init())
.def(py::init<std::string, std::string, int, float, std::string, std::string>())
.def("setSalary", &Teacher::setSalary)
.def("setSubject", &Teacher::setSubject)
.def("setLevel", &Teacher::setLevel)
.def_property("salary", &Teacher::getSalary, &Teacher::setSalary)
.def_property("subject", &Teacher::getSubject, &Teacher::setSubject)
.def_property("level", &Teacher::getLevel, &Teacher::setLevel)
.def("eat", py::overload_cast<std::string>(&Teacher::eat))
.def("eat", py::overload_cast<std::string, int>(&Teacher::eat))
.def("eat", py::overload_cast<>(&Teacher::eat));
}
2. 重载 overload
py::overload_cast<Typenname>( Func)
.def("eat", py::overload_cast<std::string>(&Teacher::eat))
.def("eat", py::overload_cast<std::string, int>(&Teacher::eat))
.def("eat", py::overload_cast<>(&Teacher::eat));
3. 枚举
py::enum_<>
在C++中定义一个枚举
enum Items
{
Chinese = 0,
Math,
English,
Science,
Bialogy
};
编写python扩展
PYBIND11_MODULE(demo5, m) {
/*
枚举
*/
py::enum_<Items>(m, "Items")
.value("Chinese", Items::Chinese)
.value("Math", Items::Math)
.value("English", Items::English)
.value("Science", Items::Science)
.value("Bialogy", Items::Bialogy)
.export_values();
}
python测试代码
var1 = demo5.Items
print(demo5.Items.__members__)