This isn't a solution by any stretch of the imagination, I'm just trying to get some ideas straight in my head ....

There are conflicting ideas of "equality" banging around for both Cube and Coord. But from the *Python* point of view one interpretation makes most sense: if an object has a public attribute, then that attribute forms part of the state of that object and should be included in the equality relation defined by the operator `==`. Other versions of "equality" should be dealt with via other interfaces. Either explicitly, e.g. `cube.comparable_to(other_cube)`, or via an intermediate object, e.g. `cube.metadata == other_cube.metadata`.