2014-01-26 9 views
20

Как указано в документации, перечисление представляет собой набор символических имен (элементов), связанных с уникальными значениями констант. PEP8 говорит, что константы обычно называются UPPER_CASE, следует ли использовать эту нотацию в Python 3.4 enums? Если да, то почему в примерах в документах используется lower_case?Должно ли 3,4 перечисления использовать UPPER_CASE_WITH_UNDERSCORES?

+2

В языках, поддерживающих перечисления в качестве граждан первого класса, перечисления! = Константы. Да, члены перечисления могут иметь постоянные значения, но это не то же самое, что переменная является константой. – Kev

+0

+1, я так не думал. Благодарю. – cdonts

+1

FWIW, есть много нарушений PEP8 в стандартном lib ... И все это означает, что это * руководство * в любом случае. Одна из самых важных его частей - знать, когда нужно сгибать/нарушать правила. ИМХО, это немного угловой случай, и я не стал бы винить вас в том, что вы идете в любом случае. Просто будьте последовательны. – mgilson

ответ

4

Update

BDFL (Доброжелательная Dictator For Life) говорил, и Enum documentation изменилось, чтобы отразить все имена элементов верхнего регистра.


Примеры в [предыдущих] документы являются строчными в первую очередь потому, что один из модулей, которые ранее существовавших Enum была основана на используемой нижнем регистре (или, по крайней мере, его автор сделал;).

Мой использование перечисления, как правило, было что-то вдоль линий:

class SomeEnum(Enum): 
    ... = 1 
    ... = 2 
    ... = 3 
globals().update(SomeEnum.__members__) 

, которые эффективно ставит всех членов в пространстве имен модуля.

Так что я бы сказал, какой стиль вам более удобен, но выбирайте стиль и будьте последовательны.

+1

Ммм Мне не нравится использовать перечисления, но это только мое мнение. Я думаю, что буду использовать 'lower_case'. Спасибо за ответ! – cdonts

6

Я думаю, что они не UPPER_CASE, потому что, это просто странно, когда оно есть. Поскольку вы можете получить доступ только к перечислениям через класс (например, my_enum.VALUE), это выглядит странно, если члены капитализируются. В C члены перечисления идут в пространство имен модуля, так что это не выглядит странно (для меня), когда члены капитализируются в использовании:

typedef enum {OFF, ON} lightswitch; 
lightswitch bathroomLight = ON; 

Но в Python доступ к ним через класс перечисления которую вы создаете, и выглядит странно, чтобы перейти от имен ClassStyle к ALL_CAPS.

class Lightswitch(Enum): 
    OFF = 0 
    ON = 1 

# isn't that weird? 
my_light = Lightswitch.OFF 

Нижняя линия, я думаю, что это просто эстетично. Однако я ошибался, и понимаю, что это только мое мнение.

+5

Ну, это не более странно, чем, скажем, 're.IGNORECASE'. (На самом деле это не странно, но это субъективно.) – Ryan

+0

@minitech Вы правы; это действительно субъективно. Может быть, разница в том, что 're.IGNORECASE' является константой уровня модуля, а член элемента перечисления больше похож на атрибуты класса. –

+0

Определенно это субъективно, мне нравится нотация 'lowercase.UPPER_CAS'E. Но я думаю, что я буду использовать 'lower_case', как в документах. Благодаря! +1 – cdonts

4

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

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

+0

Да, я думаю, что документация должна быть правильной. Спасибо за Ваш ответ! +1 – cdonts

+0

Конечно. Как говорили другие, важна последовательность. не забудьте принять ответ;) – scry

+0

Хорошо, я согласен с этим, но ответа нет, все ответы хорошие, и это зависит от программиста. Благодарю. – cdonts

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

  • Нет связанных вопросов^_^