C Extensions Overview
Because Python itself is coded in C today, compiled Python extensions can be coded in any language that is C compatible in terms of call stacks and linking. That includes C, but also C++ with appropriate “extern C” declarations (which are automatically provided in Python header files). Regardless of the implementation language, the compiled Python extensions language can take two forms:
- C modules
These look and feel to their clients like Python module files
- C types
These behave like standard built-in types (numbers, lists, and so on)
Generally, C extension modules are used to implement flat function libraries, and they wind up appearing as importable modules to Python code (hence their name). C extension types are used to code objects that generate multiple instances and may optionally support expression operators much like classes. Because built-in types are really just precoded C extension types, your C extension types can do anything that built-in types can: method calls, addition, indexing, slicing, and so on.[*]
Moreover, C extension types today may provide a class-like interface, and so can support customization by either subclassing or coding “wrapper” classes as frontend interfaces to the type. For instance, as we saw in Chapter 20, the Python list object may now be customized by direct subclassing.
To make the interface work, both C modules and types must provide a layer of “glue” code that translates calls and data between the two languages. This layer registers ...