LoginSignup
4

More than 3 years have passed since last update.

Pythonのenumと実用例

Last updated at Posted at 2019-06-05

enumは何

列挙型とは、コンピュータプログラミングにおいて、...実際のコンパイル時あるいは実行時には、列挙型は整数で実装されることが多い -- ウィキペディア

個人的な見解としては、ラベルみたいなものです

pythonで実施してみます

enum_1.py
# モジュールをインポート
from enum import Enum

# クラスのパラメータにEnumを与えればok
class LANGUAGE(Enum):
      PYTHON = 1
      JAVA = 2
      PHP = 3
      GO = 4 
print(LANGUAGE.PYTHON) # LANGUAGE.PYTHON
print(LANGUAGE.PYTHON.name) # PYTHON
print(LANGUAGE.PYTHON.value) # 1

#ループさせることもできる
for x in LANGUAGE:
    print(x)
# LANGUAGE.PYTHON
# LANGUAGE.JAVA
# LANGUAGE.PHP
# LANGUAGE.GO

# enumのvalueも別に数字である必要はありません
class LANGUAGE(Enum):
      PYTHON = 'python'
print(LANGUAGE.PYTHON.value)  
# python

# 数字でvalueを固定したい場合
# IntEnumモジュールをインポート
from enum import IntEnum
class LANGUAGE(IntEnum):
      PYTHON = 'python'
      JAVA = 2
      PHP = 3
      GO = 4 
#下記のエラーが出ます
ValueError: invalid literal for int() with base 10: 'python'

# 同じ値が存在することもできる
class LANGUAGE(Enum):
      PYTHON = 2
      JAVA = 2
      PHP = 3
      GO = 4
# ただし、この場合、ニ個目の定義は基本無視される(表示させる方法もあるけど)
for x in LANGUAGE:
    print(x)

# 同じ値を定義させない方法もある
# uniqueモジュールをインポート
from enum import unique
@unique
class LANGUAGE(Enum):
      PYTHON = 2
      JAVA = 2
      PHP = 3
      GO = 4
#下記のエラーが出ます
ValueError: duplicate values found in <enum 'LANGUAGE'>: JAVA -> PYTHON

実用例を見てみます

enumの実用例としてはデータベースの連携にあると私は考えています。
例えば、よくあるユーザーテーブルを例として見てみます...

User

name age status
python 29(意外と長い) 1
go 10 -1

statusカラムに注目しましょう 、1と-1の値がそれぞれ入ってます、意味としては

  • 1が正常にログイン出来る
  • -1はブロックされてログイン出来ない

でも数字だけ見ても意味が分からないし、更に2、3、4、5と増えて行くので推測すら難しい:point_up:

ここでenumの登場です

enum_2.py
# モジュールをインポート   
from enum import Enum
#例えばaはuser表のstatusカラムの値
a = 1
class STATUS(Enum):
      NORMAL = 1
      BLOCK = -1

print(STATUS(a).name) # NORMALが出力される、わかりやすいでしょう

Explicit is better than implicit(暗示するより明示するほうがいい。).--pythonの哲学

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4