So Jim and PJE finally convinced me to do it the right way. :) Thanks guys - it turned out very nice. http://bugs.python.org/issue1560 http://spreadsheets.google.com/ccc?key=pHIJrYc_pnIUpTm6QSG2gZg&hl=en_US It caches type/metatype attribute lookups, including missing attributes. Summary of the bug tracker issue: - Successful attribute lookups are 20% faster, even for classes with short MROs and (probably most) builtins - haven't tested unsuccessful lookups - Successful hasattr is 5-10% faster, unsuccessful is 5% faster (less impressive than above, and likely due to overhead - internally, all lookups are the same) - list.__init__ and list().__init__ are slower, and I can't figure out why (creating instances of subclasses of list will be a little slower, and this may show up in other builtin types) - I haven't benchmarked type attribute sets (how much do we care?) - it should be quite a bit faster than updating a slot, though - Caching missing attributes is crucial for good performance - The CreateNewInstances benchmark uncovered an issue that needs fixing; please see the tracker for details All kinds of commentary and feedback is most welcome. Neil