Maybe call this `as_inverse` to make clear this is going to return a new version of itself?

Using the hidden 'as_inverse' attribute seems a little ugly - do you think there is any way round it?  For example, when you call `mapping.get_forward()` you actually get `mapping.backward` if `is_inverse` is True, so in this case `mapping.forward != mapping.get_forward()`` which is a bit strange and makes it a bit harder to think about the object.