html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/2292#issuecomment-979759002,https://api.github.com/repos/pydata/xarray/issues/2292,979759002,IC_kwDOAMm_X846Ze-a,25172489,2021-11-26T07:48:21Z,2021-11-26T07:52:42Z,NONE,"Would like to chime in that we use a similar approach as in the last comment of @DerWeh . But we extend this by overloading the `__str__` method of the `enum.Enum` base class, and implement a `Dimension` base class to use for our enum dimensions: ``` class Dimension(str, enum.Enum): """"""Base class for all dimension enums It is of type string because this is needed for xarray. """""" def __str__(self): return type(self).__name__ + ""."" + self.name ``` Using this the xarray output is more consistent: ``` >>> class CoordId(Dimension): ... LAT = 'lat' ... LON = 'lon' ... >>> xr.DataArray( ... data=np.arange(3 * 2).reshape(3, 2), ... coords={CoordId.LAT: [1, 2, 3], CoordId.LON: [7, 8]}, ... dims=[CoordId.LAT, CoordId.LON], ... ) array([[0, 1], [2, 3], [4, 5]]) Coordinates: * CoordId.LAT (CoordId.LAT) int64 1 2 3 * CoordId.LON (CoordId.LON) int64 7 8 ``` We then have deserialization code, that re-creates enum members when reading NetCDF files with corresponding dimensions (and coordinates). Access to coordinates works with enum members as well as their string value.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,341643235