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). Python extensions coded in a C-compatible language can take two forms:
C modules, which look and feel to their clients like Python module files
C types, which behave like standard built-in types (numbers, lists, etc.)
Generally, C modules are used to implement flat function libraries, and C types are used to code objects that generate multiple instances. 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.[143] In the current Python release, though, types are not quite classes -- you cannot customize types by coding a Python subclass unless you add “wrapper” classes as frontend interfaces to the type. More on this later.
Both C modules and types register their operations with the Python interpreter as C function pointers. In all cases, the C layer is responsible for converting arguments passed from Python to C form, and converting results from C to Python form. Python scripts simply import C extensions and use them as though they were really coded in Python; C code does all the translation work.
C modules and types are also responsible for ...