mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-23 02:05:57 +01:00
pybind11 example: add inheritance
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
Reference in New Issue
Block a user