I'm wary of this caching (and if fact storing the axis for for concatenation at the CoordSignatire level - see later comments). I'm not sure why you expose a ```calculate_extents()``` method for the user to manually update the extent when axis is changed and yet you protect the ```dim_order``` equivalent to ```dim_extents``` via a property so it it automatically updated. I'd simply expose ```axis_order``` and ```axis_extent``` both as properties, or methods taking axis, or simply exposing the tuples/lists directly. Whichever you choose, I'd calculate them all in the constructor rather that using this caching and updating technique.