You can use help() instead of dir() to get that information you wanted.

As for why it is that way, it's because the latter two are properties of the object that do not require any computation, whereas the first is something that has to be generated from the imaginary number rather than being part of what's stored for it. It's a subtle difference.