pybind11 example: add inheritance

This commit is contained in:
Ciro Santilli 六四事件 法轮功
2020-02-26 00:00:02 +00:00
parent bab029f606
commit 6f691eb7d8
2 changed files with 19 additions and 6 deletions

View File

@@ -3,12 +3,19 @@
#include <pybind11/pybind11.h> #include <pybind11/pybind11.h>
struct ClassTest { struct ClassTest {
ClassTest(const std::string &name) : name(name) { } ClassTest(const std::string &name) : name(name) {}
void setName(const std::string &name_) { name = name_; } void setName(const std::string &name_) { name = name_; }
const std::string &getName() const { return name; } const std::string &getName() const { return name; }
std::string name; std::string name;
}; };
struct ClassTestDerived : ClassTest {
ClassTestDerived(const std::string &name, const std::string &name2) :
ClassTest(name), name2(name2) {}
std::string getName2() { return name + name2 + "2"; }
std::string name2;
};
namespace py = pybind11; namespace py = pybind11;
PYBIND11_PLUGIN(class_test) { PYBIND11_PLUGIN(class_test) {
@@ -18,5 +25,9 @@ PYBIND11_PLUGIN(class_test) {
.def("setName", &ClassTest::setName) .def("setName", &ClassTest::setName)
.def("getName", &ClassTest::getName) .def("getName", &ClassTest::getName)
.def_readwrite("name", &ClassTest::name); .def_readwrite("name", &ClassTest::name);
py::class_<ClassTestDerived, ClassTest>(m, "ClassTestDerived")
.def(py::init<const std::string &, const std::string &>())
.def("getName2", &ClassTestDerived::getName2)
.def_readwrite("name", &ClassTestDerived::name);
return m.ptr(); return m.ptr();
} }

View File

@@ -2,8 +2,10 @@
import class_test import class_test
my_class_test = class_test.ClassTest("abc"); my_class_test = class_test.ClassTest('abc');
print(my_class_test.getName()) assert(my_class_test.getName() == 'abc')
my_class_test.setName("012") my_class_test.setName('012')
print(my_class_test.getName()) assert(my_class_test.name == '012')
assert(my_class_test.getName() == my_class_test.name)
my_class_test_derived = class_test.ClassTestDerived('abc', 'def');
assert(my_class_test_derived.getName2() == 'abcdef2')