列挙型はラベルまたは定数のコレクションとみなすことができ、通常は週、月、ステータスなどの特定の限定されたコレクションを表すために使用されます。 Python のネイティブ型 (組み込み型) には特別な列挙型はありませんが、辞書やクラスなどの多くのメソッドを通じて実装できます。
WEEKDAY = { 'MON': 1, 'TUS': 2, 'WEN': 3, 'THU': 4, 'FRI': 5 } class Color: RED = 0 GREEN = 1 BLUE = 2
上記の 2 つのメソッドは次のように考えることができます。単純な列挙型の実装では、そのような列挙型変数がローカル スコープでのみ使用される場合は問題ありませんが、問題はそれらがすべて変更可能であることです。つまり、他の場所で変更され、実装に影響を与える可能性があります。 use:
WEEKDAY['MON'] = WEEKDAY['FRI'] print(WEEKDAY) {'FRI': 5, 'TUS': 2, 'MON': 5, 'WEN': 3, 'THU': 4} 通过类定义的枚举甚至可以实例化,变得不伦不类: c = Color() print(c.RED) Color.RED = 2 print(c.RED) 0 2
もちろん、タプルなどの不変型 (immutable) を使用することもできますが、これでは列挙型の本来の目的が失われ、ラベルが意味のない変数に劣化します:
COLOR = ('R', 'G', 'B') print(COLOR[0], COLOR[1], COLOR[2]) R G B
より良いソリューションを提供するために、Python は PEP 435 を通じてバージョン 3.4 に enum 標準ライブラリを追加しました。3.4 より前のバージョンでは、pip install enum を通じて互換性のあるサポートされるライブラリをダウンロードすることもできます。 enum は Enum/IntEnum/unique の 3 つのツールを提供しており、その使用法は非常に簡単です。Enum/IntEnum を継承することで列挙型を定義できます。IntEnum は列挙メンバーを整数型に制限し (または整数型に変換でき)、unique メソッドはデコレータは列挙型メンバーの値を反復不可能に制限します:
from enum import Enum, IntEnum, unique try: @unique class WEEKDAY(Enum): MON = 1 TUS = 2 WEN = 3 THU = 4 FRI = 1 except ValueError as e: print(e) duplicate values found in : FRI -> MON try: class Color(IntEnum): RED = 0 GREEN = 1 BLUE = 'b' except ValueError as e: print(e) invalid literal for int() with base 10: 'b'
以上がenum Pythonとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。