Python列挙【一】

5865 ワード

1.列挙の定義
  • まず、enumモジュールをインポートするように定義します.
  • 列挙定義はclassキーワードでEnumクラスを継承する.
  • 列挙されたclassと定義クラスを定義するclassには、「次の博文は共有し続ける」という違いがあります.
  • サンプルコード:
    from enum import Enum

    class
    Color(Enum): red = 1 orange = 2 yellow = 3 green = 4 blue = 5 indigo = 6 purple = 7
    コード解析:
  • 上のコードは、色の列挙Colorを定義しています.
  • 色には7人のメンバーが列挙する、それぞれColorである.red、Color.orange、Color.yellowなど.
  • 各メンバーには、それぞれの名前と値があります.Color.redメンバーの名前は:red、値は:1です.
  • 各メンバーのデータ型は、その属する列挙である.[*注:classで定義されたクラスは、実際にはタイプです]
  • 1.1      ,            
    from enum import Enum

    class
    Color(Enum): red = 1 red = 2
    上のコードは、実行できません.ヒントエラー:TypeError:Attempted to reuse key:'red'
    1.2デフォルトでは、メンバー値によって同じ値が許可されます.ただし、同じ値の2つのメンバーは、2番目のメンバーの名前が最初のメンバーの別名とみなされます.
    from enum import Enum

    class
    Color(Enum): red = 1 red_alias = 1
    メンバー・コールredとColorred_aliasが同じ値を持つ場合、メンバーColor.red_aliasの名前red_aliasはメンバーとして扱われていますred名redの別名.
    1.3同じ値のメンバーが列挙されている場合、値から列挙されたメンバーを取得する場合、最初のメンバーのみが取得されます.
    from enum import Enum

    class
    Color(Enum): red = 1 red_alias = 1 print(Color(1))
    出力結果は:Color.red
    1.4列挙の定義を制限する場合、同じ値のメンバーは定義できません.アクセサリー@unique【uniqueモジュールをインポートする】を使用できます.
    from enum import Enum, unique
    
    
    @unique
    class Color(Enum):
        red = 1
        red_alias = 1
    再実行するとエラーが表示されます:ValueError:duplicate values found in:red_alias -> red
     
    2.列挙取値
    2.1メンバー名によるメンバーの取得
    Color['red']
    2.2メンバー値によるメンバーの取得
    Color(2)
    2.3メンバーによる名前と値の取得
    red_member = Color.red
    red_member.name
    red_member.value
     
    3.反復器
    3.1列挙は反復器をサポートし、列挙メンバーを巡回することができる
    for color in Color:
        print(color)
    出力結果は、列挙されたすべてのメンバーです.Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple.
    3.2値の重複するメンバーを列挙する場合、列挙をループするときに値の重複するメンバーの最初のメンバーのみが取得されます.
    from enum import Enum
    
    
    class Color(Enum):
        red = 1
        orange = 2
        yellow = 3
        green = 4
        blue = 5
        indigo = 6
        purple = 7
        red_alias = 1
    
    
    for color in Color:
        print(color)
    出力結果は:Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple.でもコールred_aliasは出力結果に現れなかった.
    3.3値を繰り返すメンバーも遍歴する場合は、列挙する特殊な属性__を使用します.members__
    from enum import Enum
    
    
    class Color(Enum):
        red = 1
        orange = 2
        yellow = 3
        green = 4
        blue = 5
        indigo = 6
        purple = 7
        red_alias = 1
    
    
    for color in Color.__members__.items():
        print(color)
    出力結果:('red',)、('orange',)、('yellow',)、('green',)、('blue',)、
           ('indigo', )、('purple', )、('red_alias', )
     
    4.列挙比較
    4.1メンバーの列挙同一性比較
    Color.red is Color.red
    出力結果:True
    Color.red is not Color.blue
    出力結果:True
    4.2列挙メンバーの等値比較
    Color.blue == Color.red
    出力結果:False
    Color.blue != Color.red
    出力結果:True
    4.3列挙メンバーのサイズ比較ができない
    Color.red < Color.blue
    出力結果エラー:TypeError:unorderable types:Color() 
    転載先:https://www.cnblogs.com/ucos/p/5896861.html