My idea is that each representation class could have an `alias` attribute or something.  They would also all have a list of the representations they transform into and the accompanying function to get from one to the other.  So the base coordinate class would have  a `__getattr__`/`__dir__` that would look through this list and do the right thing only if one of the `alias`s matches the requested attribute name (and also cache it on the class the first time its used).  This code can be lifted almost wholesale from the current attribute-style access that lets us do things like ``ICRS(...).galactic``.

This part may be a detail, but there is a subtle difference from the coordinate frame transforms: it's not a *graph*. There has to be a direct transform from one representation (or its superclass) to another.  Users can register new representation transform functions, and they would follow the same rules as the builtin ones.  That has the advantage of being trivial to implement, but if later it turns out we want a full transform graph like for the frame transforms, we can add it in at that time.

I didn't want to nail the details of this down in the API, because I think experimenting a bit with actual code and different implementations might help.  The high-level class would always use `represent_as`, which would hide all the details.  But if it's important to anyone to work this out now, I am willing to do so.