implement multiple-instance objects in C, you need to code a C
extension type, not a module. Like Python
classes, C types generate multiple-instance objects and can overload
(i.e., intercept and implement) Python expression operators and type
operations. Unlike classes, though, types do not support attribute
inheritance by themselves -- attributes are fetched from a flat
names table, not a namespace objects tree. That makes sense if you
realize that Python’s built-in types are simply precoded C
extension types; when you ask for the list
method, for instance, inheritance never enters the picture. We can
add inheritance for types by coding “wrapper” classes,
but it is a manual process (more on this later).
One of the biggest drawbacks of types, though, is their size -- to implement a realistically equipped C type, you need to code lots of not-very-pretty C code, and fill out type descriptor tables with pointers to link up operation handlers. In fact, C extension types are so complex that I’m going to cut some details here. To give you a feel for the overall structure, Example 19-15 presents a C string stack type implementation, but with the bodies of all its functions stripped out. For the complete implementation, see this file on the book’s CD (see http://examples.oreilly.com/python2).
This C type roughly implements the same interface as the stack classes we met earlier in Chapter 17, but imposes a few limits on the stack itself and does ...