Ho una semplice enum in Python che assomiglia a questo:Come posso trovare elegantemente il valore successivo e precedente in un Enum Python?
from enum import Enum
class MyEnum(Enum):
#All members have increasing non-consecutive integer values.
A = 0
B = 2
C = 10
D = 18
...
voglio funzioni pred()
e succ()
che, dato un membro della MyEnum
ritorno del membro del MyEnum
che precede e riesce l'elemento dato, rispettivamente, (proprio come the functions of the same name in Haskell). Ad esempio succ(MyEnum.B)
e pred(MyEnum.D)
devono entrambi restituire MyEnum.C
. È possibile sollevare un'eccezione se succ
viene chiamato sull'ultimo membro di pred
viene chiamato sul primo membro.
Non sembra esserci alcun metodo incorporato per farlo, e mentre posso chiamare lo iter(MyEnum)
per iterare sui valori deve passare attraverso l'intero enum dall'inizio. Probabilmente potrei implementare un loop sciatto per realizzare questo da solo, ma so che ci sono alcuni veri guru Python su questo sito, quindi a voi chiedo: c'è un approccio migliore?
Lo scopo di 'enum' in Python è quello di fornire un tipo di dati che possono essere utilizzati al posto dei "numeri magici "e tale, non proprio per fornire un tipo di dati matematico corrispondente a insiemi enumerabili. Quindi lo scopo dell'enum di Haskell è leggermente diverso. In ogni caso nulla ti impedisce di implementare 'pred' e' succ' come metodi di 'MyEnum'. – Bakuriu
Fornito una semplice traduzione della risposta in questa domanda. –