Сообщить об ошибке.

Допустимые члены и атрибуты перечислений модуля enum в Python

В основном, для значений перечисления Enum используются целые числа. Использование целых чисел короткое, удобное и предоставляется функциональным API по умолчанию, но не требует строгого соблюдения.

В подавляющем большинстве случаев, при использовании перечислений никому не важно, каково реальное значение перечисления. Но если значение важно, то перечисления могут иметь произвольные значения.

Перечисления представляют собой классы Python и, как обычно, могут иметь методы и специальные методы. Если у нас есть это перечисление Enum:

>>> class Mood(Enum):
...     FUNKY = 1
...     HAPPY = 3
...
...     def describe(self):
...         # self is the member here
...         return self.name, self.value
...
...     def __str__(self):
...         return 'my custom str! {0}'.format(self.value)
...
...     @classmethod
...     def favorite_mood(cls):
...         # cls here is the enumeration
...         return cls.HAPPY
...

# Затем:
>>> Mood.favorite_mood()
# <Mood.HAPPY: 3>
>>> Mood.HAPPY.describe()
# ('HAPPY', 3)
>>> str(Mood.FUNKY)
# 'my custom str! 1'

Правила того, что разрешено в перечислениях: имена, которые начинаются и заканчиваются одним подчеркиванием, зарезервированы модулем enum и не могут использоваться. Все другие атрибуты, определенные в перечислении, станут членами этого перечисления, за исключением специальных методов (__str__(), __add__() и т. д.), дескрипторов (методы также являются дескрипторами) и имен переменных, перечисленных в _ignore_.

Примечание: если перечисление определяет __new__() и/или __init__(), то в эти методы будут переданы любые значения, присвоенные члену перечисления.

Например:

>>> class Planet(Enum):
...     MERCURY = (3.303e+23, 2.4397e6)
...     VENUS   = (4.869e+24, 6.0518e6)
...     EARTH   = (5.976e+24, 6.37814e6)
...     MARS    = (6.421e+23, 3.3972e6)
...     JUPITER = (1.9e+27,   7.1492e7)
...     SATURN  = (5.688e+26, 6.0268e7)
...     URANUS  = (8.686e+25, 2.5559e7)
...     NEPTUNE = (1.024e+26, 2.4746e7)
...     def __init__(self, mass, radius):
...         self.mass = mass       # in kilograms
...         self.radius = radius   # in meters
...     @property
...     def surface_gravity(self):
...         # universal gravitational constant  (m3 kg-1 s-2)
...         G = 6.67300E-11
...         return G * self.mass / (self.radius * self.radius)
...
>>> Planet.EARTH.value
(5.976e+24, 6378140.0)
>>> Planet.EARTH.surface_gravity
9.802652743337129