Subtypes of str (for example) implemented in C do not inherit str's tp_as_buffer funcs unless the subtypes provide a pointer to a tp_as_buffer structure in their type struct. This is different from how the other method suites (tp_as_sequence, etc.) are handled; near the end of PyType_Ready the other method suites are copied from the base into the subtype if the subtype's slot is NULL. It looks like the tp_as_buffer omission is simply an oversight, since the flag manipulations in inherit_special appear to be preparing the way for copying the base pointer into the subtype. So I've attached a small patch (against the 2.3a1 version of typeobject.c) to fix this.