The pet module provides the Dog and Cat classes.
Both C++ classes have a getName() and a setName() class functions.
The Dog and Cat classes are exposed in a different way to the Python code:
Dogis added to the Python module with a getter and a setter.Catis more pythonic and provides access to the C++ accessors as a property.
In C++, both classes are defined in the exact same way, but:
- the
getandsetfunction of theDogclass are bound to functions of the same name in Python - for the
Catthenameclass property on the Python side is using the C++ getter and setter to read and write thenamevalue.
py::class_<Dog>(m, "Dog")
.def(py::init<const std::string &>())
.def("setName", &Dog::setName, "Setting the dog's name")
.def("getName", &Dog::getName), "Getting the dog's name";
py::class_<Cat>(m, "Cat")
.def(py::init<const std::string &>())
.def_property("name", &Cat::getName, &Cat::setName, "The cat name");You can compile and import the pet module, containing a Dog and a Cat classes:
$ mkdir build
$ cmake ..
$ make
$ python3
>>> import pet
>>> a = pet.Dog('Flip')
>>> print(a)
<pet.Pet object at 0x10cd98060>
>>> a.getName()
'Flip'
>>> a.setName('Flop')
>>> a.getName()
'Flop'
>>> b = pet.Cat('Fox')
>>> b.name
'Fox'
>>> b.name = 'Fix'
>>> b.name
'Fix'