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