ホームページ  >  記事  >  バックエンド開発  >  enum Pythonとは何ですか

enum Pythonとは何ですか

silencement
silencementオリジナル
2019-06-22 10:38:063079ブラウズ

enum Pythonとは何ですか

列挙型はラベルまたは定数のコレクションとみなすことができ、通常は週、月、ステータスなどの特定の限定されたコレクションを表すために使用されます。 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。