Also, I have to think this would be appreciably slower than the current mechanism, having to run through this ChainMap cascade for (almost) *every* attribute lookup?

If I remember correctly, ChainMap is pretty fast. I doubt it would be appreciably slower, though it would undoubtedly be some amount slower in at least some cases.

For modules: no, the second level mapping would only be consulted in cases that the name wasn't found in the first level. There would be a very minor speed hit due to the ChainMap overhead, probably not anything anyone would worry about. Consulting two dictionaries instead of one is a very very very minor penalty.

For classes, it's worse: the successive alias mappings would be consulted at each level of the MRO in cases a name wasn't found in the normal attribute dict for the first member of the MRO, which is certainly going to be *much* of the time. How bad a hit is this? It would depend on how long the MRO is; it would double the number of dict lookups for any given attribute lookup. Is that an appreciable slow down? I don't know. I kind of doubt it though.