Wrapping C++ Classes with SWIG
One of the more clever tricks SWIG can perform is class wrapper generation. Given a C++ class declaration and special command-line settings, SWIG generates the following:
A C++-coded Python extension module with accessor functions that interface with the C++ class’s methods and members
A Python-coded module with a wrapper class (called a “shadow” or “proxy” class in SWIG-speak) that interfaces with the C++ class accessor functions module
As before, to use SWIG in this domain, write and debug your class as though it would be used only from C++. Then, simply run SWIG in your makefile to scan the C++ class declaration and compile and link its output. The end result is that by importing the shadow class in your Python scripts, you can utilize C++ classes as though they were really coded in Python. Not only can Python programs make and use instances of the C++ class, they can also customize it by subclassing the generated shadow class.
A Simple C++ Extension Class
To see how this works, we need a C++ class. To illustrate,
let’s code a simple one to be used in Python scripts.[*] The following C++ files define a Number
class with three methods (add
, sub
, display
), a data member (data
), and a constructor and destructor.
Example 22-18 shows the
header file.
Example 22-18. PP3E\Integrate\Extend\Swig\Shadow\number.h
class Number { public: Number(int start); // constructor ~Number( ); // destructor void add(int value); // update data member void sub(int value); int square( ...
Get Programming Python, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.