Шаг 157.
Основы языка Python.
Итераторы, контейнеры и перечисления. Перечисления

    На этом шаге мы рассмотрим особенности использования перечислений.

    Перечисление - это определенный самим программистом набор каких-либо именованных значений. Обычно они применяются для того, чтобы дать понятные имена каким-либо значениям, используемым в коде программы, - например, кодам ошибок, возвращаемым функциями Windows API.

    Инструменты для создания перечислений появились в Python 3.4. Это два класса, определенные в модуле Enum:

    Имена элементов перечислений должны быть уникальны (что и неудивительно - ведь фактически это атрибуты объекта класса). Однако разные элементы все же могут хранить одинаковые значения:

from enum import Enum
class Versions(Enum):
    V2_7 = "2.7"
    V3_4 = "3.4"
    MostFresh = "3.4"

    Чтобы объявить, что наше перечисление может хранить лишь уникальные значения, мы можем использовать декоратор unique, также определенный в модуле enum:

from enum import Enum, unique
@unique
class Versions(Enum):
    V2_7 = "2.7"
    V3_4 = "3.4"

    Если мы попытаемся определить в классе, для которого был указан декоратор unique, элементы с одинаковыми значениями, то получим сообщение об ошибке.

    Определив перечисление, можно использовать его элементы в вычислениях:

>>> e = Versions.V3_4
>>> e
<Versions.V3_4: '3.4'>
>>> e.value
'3.4'
>>> e == Versions.V2_7
False

    Отметим, что для этого нам не придется создавать экземпляр класса. Это сделает сам Python, неявно создав экземпляр с тем же именем, что мы дали классу (вся необходимая для этого функциональность определена в базовых классах перечислений Enum и IntEnum).

    Все классы перечислений принадлежат типу EnumMeta из модуля enum:

>>> type (Colors)
<class 'enum.EnumMeta'>
>>> from enum import EnumMeta
>>> type (Colors) == EnumMeta
True

    Однако элементы перечислений уже являются экземплярами их классов:

>>> type (Colors.Red)
<enum 'Colors'>
>>> type (Colors.Red) == Colors
True

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг