После многолетних дебатов по этому вопросу было одобрено предложение о включении типа перечисления в Python 3.4. Но его уже критиковали как неловкий компромисс.
По словам Эли Бендерского, который является одним из авторов предложения по улучшению Python PEP 435, для этого потребовалось много усилий.
В своем блоге он ссылается на:
месяцы интенсивного обсуждения — более 1000 писем в десятках тем, разбросанных по двум спискам рассылки, и пара сотен дополнительных личных писем
и говорит::
Процесс обсуждения и принятия решений был долгим и трудным, но в конечном итоге очень позитивным. Коллективный мозг, безусловно, лучше, чем любой отдельный; окончательное предложение во многих отношениях лучше, чем первоначальное, и подавляющее большинство разработчиков ядра Python теперь чувствуют себя хорошо (плюс-минус пара очень незначительных проблем).
Предлагаемый тип перечисления аналогичен тем, которые встречаются в других языках. Его абстрактные состояния:
Перечисление-это набор символических имен, привязанных к уникальным, постоянным значениям. В перечислении значения могут сравниваться по идентичности, а само перечисление может быть повторено.
И это предложение также относится к тому факту, что идея добавления типа перечисления в Python не нова — предыдущая попытка сделать это была отклонена в 2005 году.
Один из вопросов, заданных от имени сообщества Python Ником Когланом, который работает в Python Software Foundation в качестве одного из основных разработчиков справочного интерпретатора CPython, звучит так: «Зачем вообще стандартизировать перечисления?»
Написав на своем сайте Python Notes он объясняет:
Идея стандартизации перечислений существует уже много лет. Что, наконец, нарушило равновесие на этот раз? Основным фактором было сочетание того, что Гвидо [Ван Россум, создатель Python] был достаточно заинтересован, чтобы вынести решение по многим и разнообразным спорным аспектам поведения Enum во время выполнения …
Другим мотивирующим фактором, однако, была возможность использовать перечисления для улучшения различных сообщений об ошибках, выдаваемых стандартной библиотекой.
Теперь, когда PEP 435 был принят, он уже подвергся сильной критике в посте Python’s sad, лишенном воображения Перечислении Эндрю Кука, в котором он описывает его как «неудобный компромисс» и указывает на фундаментальный недостаток, заключающийся в том, что тип перечисления отсчитывается от 1 и таким образом нарушает изречение Python «только один способ сделать это», поскольку Python отсчитывается от 0. Он также страдает от необходимости вручную присваивать целочисленные значения перечислениям и псевдонимам, которые возникают, если вы назначаете одно и то же целое число более одного раза.
Однако беспокойство Кука было принято на борт Когланом, который пишет по электронной почте:
Я считаю, что ваши опасения по поводу псевдонимов и значений, присвоенных функциональным API, вполне обоснованы, поэтому я взял на себя смелость превратить их в предложения по отслеживанию проблем в качестве аспектов, к которым мы должны вернуться, как только будет реализована базовая реализация перечисления.
Продолжающаяся дискуссия о PEP 435 является интересным примером того, как развивается программное обеспечение с открытым исходным кодом и как разрабатываются языки. Как правило, легко изобрести новый язык, но гораздо сложнее внедрить новую функцию в существующий язык, потому что вам нужно определить ее влияние на существующий синтаксис и семантику.