Mam proste wyliczenia w Pythonie, który wygląda tak:Jak mogę elegancko znaleźć następną i poprzednią wartość w Enumie Pythona?
from enum import Enum
class MyEnum(Enum):
#All members have increasing non-consecutive integer values.
A = 0
B = 2
C = 10
D = 18
...
Chcę funkcje pred()
i succ()
że dany członek MyEnum
zamian członek MyEnum
które poprzedza i uda dany element, odpowiednio (podobnie jak the functions of the same name in Haskell). Na przykład succ(MyEnum.B)
i pred(MyEnum.D)
powinny zwracać zarówno MyEnum.C
. Wyjątek można podnieść, jeśli zostanie wywołany succ
na ostatnim członku pred
na pierwszym członku.
Wydaje się, że nie ma w tym żadnej wbudowanej metody, i chociaż mogę zadzwonić pod numer iter(MyEnum)
, aby powtórzyć wartości, musi ono przejść od początku do całego wyliczenia. Mogłabym prawdopodobnie zaimplementować niechlujną pętlę, aby to osiągnąć na własną rękę, ale wiem, że na tej stronie jest kilka prawdziwych guru Pythona, więc pytam: czy istnieje lepsze podejście?
Celem 'enum' w Pythonie jest dostarczenie typ danych, które mogą być używane w miejsce„magicznych liczb "i tak naprawdę nie dostarczają matematycznego typu danych odpowiadającego zestawom przeliczalnym. Zatem cel "wyliczenia" Haskella jest nieco inny. W każdym razie nic nie uniemożliwia implementacji 'pred' i' succ' jako metod 'MyEnum'. – Bakuriu
Dostarczono proste tłumaczenie odpowiedzi w tym pytaniu. –