web-dev-qa-db-ja.com

3.4列挙型はUPPER_CASE_WITH_UNDERSCORESを使用する必要がありますか?

ドキュメントに記載されているように、列挙型は、一意の定数値にバインドされたシンボリック名(メンバー)のセットです。 PEP8 は、定数は通常UPPER_CASEという名前であると言っていますが、この表記をPython 3.4 enums ? 、ドキュメントの例でlower_caseを使用しているのはなぜですか?

32
cdonts

更新

BDFL(Benevolent Dictator For Life) 話しました 、そして Enum documentation すべての大文字のメンバー名を反映するように変更されました。


[前の]ドキュメントの例は小文字です。これは主に、Enumが使用された小文字に基づいた既存のモジュールの1つ(または少なくともその作成者が行った;)のためです。

私の列挙型の使用法は、通常、次のようなものでした。

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

これにより、すべてのメンバーがモジュールの名前空間に効果的に配置されます。

ですから、どちらのスタイルがあなたにとってより快適であると感じるかは言うでしょうが、スタイルを選び、一貫性を保ってください。

11
Ethan Furman

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

要するに、それはただの美的だと思います。しかし、私は以前に間違っていました、そしてこれは私の意見にすぎないことを理解しています。

8
Cody Piersall

スタイルについて疑問がある場合、私は通常、標準ライブラリコードで使用されているスタイルと公式ドキュメントの例を使用します。それは私が恣意的な決定に時間を無駄にすることを防ぎます。

したがって、この場合、変数名のように小文字をお勧めします。

4
scry