環境
- Windows 10
- Python 3.10.1
- VSCode
実装
列挙型の定義方法
- enumモジュールのEnumクラスを継承させることで定義可能
- name = valueのワンセットで値を定義する
- 変数名が name、値が value として扱われる
shared\Enums\SiteType.py
from enum import Enum
class SiteType(Enum):
NOT_NEEDS_LOGIN = 1
NEEDS_LOGIN_AND_ONE_STEP = 2
NEEDS_LOGIN_AND_TWO_STEP = 3
shared\Enums\ScrapingType.py
from enum import Enum
class ScrapingType(Enum):
SELENIUM = 1
SOUP = 2 # BeautifulSoup
列挙型の呼び出し方法
- 一般的な呼び出し方
ScrapingType.SELENIUM // (constant) SELENIUM: Literal[ScrapingType.SELENIUM]
- nameの呼び出し
ScrapingType.SOUP.name // "SOUP"
- valueの呼び出し
ScrapingType.SOUP.value // 2
- valueから値の呼び出し
ScrapingType(1) // ScrapingType.SELENIUM
tests\Enum\test_scraping_type.py
※いずれもテストが通るパターンです
import pytest
from shared.Enums.ScrapingType import ScrapingType
# 数字で指定すると対応する値(ScrapingType.SELENIUM)が返る
def test_数字からスクレイピング種別を取得できる():
assert ScrapingType(1) == ScrapingType.SELENIUM
# enumの識別子
def test_スクレイピング種別の識別子を取得できる():
assert ScrapingType.SOUP.name == "SOUP"
# enumの値
def test_スクレイピング種別の値を取得できる():
assert ScrapingType.SOUP.value == 2
def test_存在しない種別の場合は例外():
with pytest.raises(ValueError):
ScrapingType(99) == ScrapingType.SELENIUM
補足
以下のように数値と比較することはできないため、数値と比較したい場合は、IntEnumクラスを使用する必要がある
ScrapingType.SELENIUM == 1
IntEnumクラスはEnum クラスとintのサブクラスになっているで、IntEnumのメンバーは int型と比較することができる
定義方法等は基本的にEnumクラスと同様
from enum import IntEnum
class IntEnumSample(IntEnum):
name = value
.
.
.
まとめ
いかがでしたでしょうか。本記事では、PythonでEnum(列挙型)クラスを扱う方法について紹介しています。ぜひ参考にしてみてください