Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのenumモジュールで学ぶ列挙型(Enum)の基礎と使い方

列挙型(Enumeration)とは、一意で不変の値が割り当てられた識別子(メンバー)の集合です。列挙型内では、メンバー同士を同一性(identity)に基づいて比較することができます。また、列挙オブジェクトは反復処理(イテレーション)にも対応しています。

enumモジュールで定義されている主なクラス

Enum:列挙定数を作成するための基底クラスです。

IntEnum:intクラスのサブクラスでもある列挙定数を作成するための基底クラスです。

列挙型の作成方法

列挙型は、通常のクラス構文を使って作成します。

# enumexample.py
from enum import Enum

class langs(Enum):
    Python = 1
    Java = 2
    Cpp = 3
    Ruby = 4

列挙型のメンバーには、人間が読みやすい文字列表現とrepr表現が用意されています。

>>> from enumexample import langs
>>> print(langs.Python)
langs.Python
>>> print(repr(langs.Python))
<langs.Python: 1>

各列挙メンバーは、nameプロパティとvalueプロパティを持っています。

>>> x = langs.Python
>>> x.name
'Python'
>>> x.value
1

全メンバーの反復処理

ループを使用すれば、すべてのメンバーを順番に取り出すことができます。

>>> for lang in langs:
...     print(lang.name, lang.value)
Python 1
Java 2
Cpp 3
Ruby 4

値や名前によるメンバーへのアクセス

メンバーには、値または名前を指定してアクセスできます。

>>> langs(3)
<langs.Cpp: 3>
>>> langs['Java']
<langs.Java: 2>

メンバーの比較

同一性演算子であるisおよびis notを使って、列挙メンバーを比較できます。

>>> x = langs(2)
>>> y = langs(4)
>>> x is y
False

エイリアス(別名)の扱い

同じ名前を持つ2つの列挙メンバーを定義することはできません。しかし、同じ値を持つ複数のメンバーは許容されています。enumexample.pyを次のように変更してみましょう。

from enum import Enum

class langs(Enum):
    Python = 1
    Java = 2
    Cpp = 3
    Ruby = 4
    Cplusplus = 3
>>> from enumexample import langs
>>> langs.Cpp
<langs.Cpp: 3>
>>> langs.Cplusplus
<langs.Cpp: 3>
>>> langs(3)
<langs.Cpp: 3>

デフォルトでは、列挙型は同じ値に対して複数の名前をエイリアス(別名)として持つことができます。値の一意性を保証したい場合は、列挙型専用のクラスデコレーター@enum.uniqueを使用します。

  1. Windowsで使えるPython開発用IDEおすすめ7選|PyCharmからAtomまで徹底解説

    Windows環境でPythonの開発を始めるとき、最初に悩むのが「どのIDE(統合開発環境)を選ぶべきか」という問題です。IDEはコードの編集・実行・デバッグなどをひとつのアプリケーションで完結できる強力なツールであり、選択次第で開発効率が大きく変わります。 本記事では、Windowsで利用できる代表的なPython対応IDEを厳選し、それぞれの特徴やメリットをわかりやすく解説します。 PyCharm PyCharmはJetBrains社が開発する、Python開発で最も人気のあるIDEのひとつです。無料のコミュニティ版と有料のプロフェッショナル版が用意されており、初心者からプロフェッショ

  2. Pythonコードを高速化する11の最適化テクニック

    Pythonはコンパイル言語ほど高速ではないことは周知の事実ですが、大手企業がPythonで大規模なワークロードを処理している事例からも分かるように、決して「遅い言語」ではありません。この記事では、正しく動作するPythonプログラムをさらに速く、効率的にするために押さえておきたい最適化のヒントを11個紹介します。 ヒント1: 組み込み関数を活用する Pythonで独自に効率的なコードを書くことも可能ですが、C言語で実装された組み込み関数の速度には到底及びません。利用可能な組み込み関数はdir(__builtins__)で一覧表示できるので、車輪の再発明をする前に必ず確認しましょう。 ヒン