I'm not sure about this. You're avoiding setting a bunch of public attributes (for optimisation reasons presumably). What made you put some before and some after the ```if not self.anonymous```? I'm concerned because I can make a ```ProtoCube``` from a cube with anonymous dimensions that in turn makes a ```CubeSignature``` and from that a ```CoordSignature```. The ```__init__``` of ```CoordSignature``` only accesses the existing attributes, but ```ProtoCube```'s other methods use things like ```CubeSignature.defn``` with no clear concern for the ```anonymous``` attribute. I appreciate the attribute access is in fact protected by the ```register``` method, but it's a little convoluted. By only partially constructing this object it makes use of the CubeSignature and CoordSignature classes difficult. For example the ```aux_coords_and_dims``` attribute of a CoordSignature could be an empty list which as far as I can see has nothing to do with missing dimension coordinates.