blog

日常・技術のことを記録する

enumをつかうとなにがうれしいの

pythonでレスポンスコードのクラスを作ったとき、
下記2つのprintの結果は同じだけど、enum使うとなにがうれしいんかな?って。
enumを使う場合
enumを使わない場合

enumを使う場合
from enum import Enum

class ResponseCode(Enum):
    OK = 200
    INPUT_ERROR = 400
    SERVER_ERROR = 500

print(ResponseCode.SERVER_ERROR.value)
# 500 が表示される


enumを使わない場合
class ResponseCode:
    OK = 200
    INPUT_ERROR = 400
    SERVER_ERROR = 500

print(ResponseCode.SERVER_ERROR)
# 500 が表示される


めも

・一般的には、定数扱いになるから安心。(pythonは定数が存在しないからならないが。大体の言語はなるらしい)

・上記例で言えば、ResponseCode「に関して列挙される」ということがわかりやすい。OKとか単体だとなにがおっけーだよ!って思うし。

・型指定をかけやすかったりする。100個の定数のうちのどれかを引数にとる関数の型を指定なら、Enumで定義しておけばクラス名で済む。が、定数定義してると100個の定数を全部orでつないで型指定することになる。しかもpythonには定数定義すらない(大文字で定義することで明示的にすることはできる)。そうなるとどこで書き換えられるかわからんから、基本的にグローバル空間に変数は置かない方がいい。

なるほどね(・3・)
ほかにもいろいろあるだろうけど、なんとなく腹落ちした(・3・)