つぶやきテック

日々のつぶやきアウトプット

つぶやきenum.auto

列挙型で連番を振る

最近になって、Pythonの列挙型で番号を順番に割り当てるときに使えるauto関数を知ったのでまとめてみます。

ちなみにPythonの列挙型(Enum)、公式ドキュメントはこちらです。

enum.auto

autoはpython3.6で追加されたヘルパークラスで、列挙型で定義した変数に連番を振る機能を提供します。

from enum import IntEnum, auto

class Post(IntEnum):
    """
    役職列挙型列挙型
    """
    STAFF = auto()           # 1
    SECTION_CHIEF = auto()  # 2
    GENERAL_MANAGER = auto() # 3

何が嬉しいの?

autoがナイとき…

autoを使わずに列挙型を実装した時、実際のコードは以下のような感じになると思います。

from enum import IntEnum

class Post(metaclass=IEnum):
    """
    役職列挙型列挙型
    """
    STAFF = 1
    SECTION_CHIEF = 2
    GENERAL_MANAGER = 3

上のコードにおいて、「変数STAFFを削除し、連番を"1"から振りなおす」という修正をすることになったとしましょう。

このとき、

  1. 変数STAFFの削除
  2. 変数SECTION_CHIEFの値を"1"に変更
  3. 変数GENERAL_MANAGERの値を"2"に変更

という3つのステップを踏む必要があります。

・・・メンドクサイよう(/ω\)

autoがアルときー!

そんな修正も、autoを使った実装にすると「STAFFを削除する」だけで済むようになります。また、その後「SECTION_CHIEFの前に新しく変数を定義し、"1"から連番を振る」という処理を実装する際にも、その行を加えるだけで修正が終わります。

んー、なかなかイイ感じ。

参考

最後に、参考になりそうなサイトを3つほどご紹介します。

追伸:記事の補足・訂正等ありましたらコメントいただけると幸いです!