2013-05-20 2 views
25

Многие методы реализации перечислений показаны в ответах на this question. Тем не менее, PEP0435 отсутствует и описывает, как Enum и IntEnum станут официальными в Python 3.4.Будущие совместимые перечисления в 2.7?

Мой вопрос заключается не в преимуществах/недостатках конкретных способов имитации перечислений в Python. Скорее, я бы хотел получить совет по наиболее передовой возможности для тех из нас, кто все еще придерживался релизов 2.X.

flufl.enum изначально собирался быть эталонной реализацией, но был удален из-за того, что члены не являлись экземплярами типа (и позволяли одновременно создавать подклассы с дополнительными элементами). Последнее не повлияло бы на изо дня в день, но, возможно, первое вызвало бы больше проблем?

Существуют ли библиотеки, которые более похожи на то, что добавляется к 3.4 и совместимы с 2.7+?

+1

Это не проблема. Использование ручных рулонов не будет ломаться, когда выпущены «официальные» перечисления. Кроме того, не используйте перечисления. Это не C. – Marcin

+7

Реализация 3.4 основана на новой функции '__prepare__' в метаклассе, поэтому перенос на 2.7 будет ... проблемой, но back-port вполне может быть возможен. Лучше придерживайтесь своих ручных; они будут продолжать работать, но не совсем имеют все преимущества официального модуля. –

+0

@JoachimSauer По мере того, как язык растет, он получает больше людей, которые менее склонны к адаптации, и поэтому растет число участников для C-подобных конструкций. – Marcin

ответ

2

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

17

Существует резервная копия модуля перезаписи PEP 435, доступная на PyPI, как enum34. Бэкпорт представляется неофициальным, однако он является автором этана Фурмана, который является основным коммиттером Python и одним из соавторов PEP 435.

Бэкпорт объявлен совместимым с Python 2.4 и выше. Конечно, в Python 2 есть несколько, относительно незначительных различий в поведении, но из моего предварительного исследования под Pyhon 2.7 я бы сказал, что уровень совместимости в прямом направлении довольно высок.

Смежные вопросы