Obtener el siguiente enumerador constante / propiedad

Digamos que tengo un enumerador, ¿es posible obtener la propiedad que sigue? Entonces, si tuviera today=Days.Sunday ¿ today=Days.Sunday hacer algo como tomorrow=today.next() ?

ejemplo:

 class Days(Enum): Sunday = 'S' Monday = 'M' ... Saturday = 'Sa' 

Sé que podría usar tuplas (como a continuación) para hacer algo como tomorrow=today[1] , pero esperaba que hubiera algo más o más elegante.

 class Days(Enum): Sunday = ('S','Monday') Monday = ('M','Tuesday') ... Saturday = ('Sa','Sunday') 

Absolutamente.

Solo agrega la funcionalidad deseada a tu clase de Days :

 class Days(Enum): Sunday = 'S' Monday = 'M' Tuesday = 'T' Wednesday = 'W' Thursday = 'Th' Friday = 'F' Saturday = 'Sa' def next(self): cls = self.__class__ members = list(cls) index = members.index(self) + 1 if index >= len(members): index = 0 return members[index] 

y es uso:

 today = Days.Wednesday print(today.next()) # Days.Thursday 

Puede crear un diccionario para buscar al día siguiente de la siguiente manera:

 In [10]: class Days(Enum): Sun = 'Su' Mon = 'M' Tue = 'Tu' Wed = 'W' Thu = 'Th' Fri = 'F' Sat = 'Sa' In [11]: days = list(Days) In [12]: nxt = dict((day, days[(i+1) % len(days)]) for i, day in enumerate(days)) 

Examen rápido:

 In [13]: nxt[Days.Tue] Out[13]:  In [14]: nxt[Days.Sat] Out[14]: