ホームページ >バックエンド開発 >Python チュートリアル >Pythonの列挙型の詳しい説明(コード例)

Pythonの列挙型の詳しい説明(コード例)

不言
不言転載
2018-12-11 10:15:093569ブラウズ

この記事では、Python の列挙型の詳細な説明 (コード例) を紹介します。一定の参考値があります。必要な友人は参照してください。お役に立てば幸いです。

Python のネイティブ型には列挙型が含まれません。より良いソリューションを提供するために、Python は PEP 435 経由でバージョン 3.4 に enum 標準ライブラリを追加しました。

列挙型はラベルまたは定数のコレクションとみなすことができ、通常は週、月、ステータスなどの特定の限定されたコレクションを表すために使用されます。特別に提供された列挙型がない場合はどうすればよいでしょうか? 一般に、列挙型は辞書またはクラスを通じて実装されます:

Color = {
    'RED'  : 1,
    'GREEN': 2,
    'BLUE' : 3,
}
class Color:
    RED   = 1
    GREEN = 2
    BLUE  = 3

この列挙型の実装方法は、慎重に使用すれば、もちろん問題ありません。それは妥協による解決策です。危険なのは、変更される可能性があることです。

Enum の使用

より良い方法は、標準ライブラリによって提供される Enum 型を使用することです。公式ライブラリは信頼できます。 3.4 より前のバージョンでも、pip install enum を通じてサポートされているライブラリをダウンロードできます。簡単な例:

from enum import Enum
class Color(Enum):
    red = 1
    green = 2
    blue = 3

列挙型メンバーには値 (デフォルトで反復可能) があり、列挙型メンバーにはわかりやすい文字列表現があります:

>>> print(Color.red)
Color.red
>>> print(repr(Color.red))
<Color.red: 1>
>>> type(Color.red)
<Enum &#39;Color&#39;>
>>> isinstance(Color.green, Color)
True

列挙型はインスタンス化できず、変更できません。

列挙型の定義

列挙型を定義する場合、メンバー名を繰り返すことはできません

class Color(Enum):
    red = 1
    green = 2
    red = 3    # TypeError: Attempted to reuse key: 'red'

メンバー値は繰り返し可能です。 2 番目のメンバーは同じである必要があります。名前は最初のメンバーのエイリアスとみなされます#

class Color(Enum):
    red   = 1
    green = 2
    blue  = 1

print(Color.red)              # Color.red
print(Color.blue)             # Color.red
print(Color.red is Color.blue)# True
print(Color(1))               # Color.red  在通过值获取枚举成员时,只能获取到第一个成员

同じメンバー値を定義できない場合は、一意のメンバー値を使用して修飾できます

from enum import Enum, unique
@unique
class Color(Enum):
    red   = 1
    green = 2
    blue  = 1  # ValueError: duplicate values found in <enum &#39;Color&#39;>: blue -> red

列挙値

メンバー名またはメンバー値によってメンバーを取得できます:

print(Color['red'])  # Color.red  通过成员名来获取成员

print(Color(1))      # Color.red  通过成员值来获取成员
各メンバーには名前属性と値属性があります:

member = Color.red
print(member.name)   # red
print(member.value)  # 1
は、定義された順序でのメンバーの反復をサポートします。重複する値を持つメンバーがある場合は、最初の重複メンバーのみが取得されます:

for color in Color:
    print(color)
特別な属性

__members__ は An名前をメンバーにマッピングする順序付き辞書。これを介して走査も実行できます。

for color in Color.__members__.items():
    print(color)          # ('red', <Color.red: 1>)

列挙型の比較

列挙型のメンバーは

is ## を介して渡すことができます。 #== による同一性比較または等価性比較: <pre class="brush:php;toolbar:false">Color.red is Color.red Color.red is not Color.blue Color.blue == Color.red Color.blue != Color.red</pre> 列挙型メンバーはサイズ比較を実行できません:

Color.red < Color.blue    # TypeError: unorderable types: Color() < Color()

拡張列挙型 IntEnum

IntEnum は Enum の拡張機能です。さまざまなタイプの整数列挙を相互に比較することもできます:

from enum import IntEnum
class Shape(IntEnum):
    circle = 1
    square = 2

class Request(IntEnum):
    post = 1
    get = 2

print(Shape.circle == 1)            # True
print(Shape.circle < 3)             # True
print(Shape.circle == Request.post) # True
print(Shape.circle >= Request.post) # True

summary

enum モジュール関数は非常に明確です。使い方も簡単で実装方法も勉強になるので、機会があればソースコードを見てみるのも良いでしょう。

以上がPythonの列挙型の詳しい説明(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。