python枚举 enum

358 阅读1分钟

导入方式

import enum

创建枚举

    class BugCode(enum.Enum):
        new = 7
        incomplete = 6
        invalid = 5
        wont_fix = 4

迭代枚举

    for code in BugCode:
        print(f'code_name:{code.name} , code_value:{code.value}')
    ---------------------------result----------------------------------
    code_name:new , code_value:7
    code_name:incomplete , code_value:6
    code_name:invalid , code_value:5
    code_name:wont_fix , code_value:4

    for bugcode in BugCode.__members__.items():
        print(f'枚举名:{bugcode[0]} 枚举值:{bugcode[1].value}')
    ----------------------------------------------------------枚举名:new 枚举值:7
    枚举名:incomplete 枚举值:6
    枚举名:invalid 枚举值:5
    枚举名:wont_fix 枚举值:4

枚举比较

    new_code = BugCode.new
    invalid_code = BugCode.invalid
    print('equality', new_code == invalid_code, new_code == BugCode.new)
    print('identity', new_code is invalid_code, new_code is BugCode.new)
    print('排序')
    try:
        print('\n'.join(' ' + s.name for s in sorted(BugCode)))
    except TypeError as err:
        print(f'cannot sort:{err}')
    -----------------------------result---------------------------------
    equality False True
    identity False True
    排序
    cannot sort:'<' not supported between instances of 'BugCode' and 'BugCode'

创建int枚举

    class BugCode(enum.IntEnum):
        new = 7
        incomplete = 6
        invalid = 5
        wont_fix = 4
    print('\n'.join(' ' + s.name for s in sorted(BugCodeInt)))
    -----------------------------result---------------------------------
    wont_fix
    invalid
    incomplete
    new

唯一枚举值

    @enum.unique
    class BugCodeUnique(enum.Enum):
        new = 7
        incomplete = 6
        invalid = 5
        wont_fix = 4
    ----------this is wrong-----------
        old = 7
        wrong = 4
  • 相同值的Enum成员会被处理为同一个成员对象的别名引用
  • new is old True
  • wont_fix is wrong True

通过编程创建枚举

  • 传递单个字符串时会按照空白符和逗号拆分
    BugCodeProcess = enum.Enum(
        value='BugCodeProcess',
        names=(
            'new old invalid wrong incomplete'
        ),
    )
    for code in BugCodeProcess:
        print(f'code_name:{code.name} , code_value:{code.value}')
    -----------------------------result---------------------------------
    code_name:new , code_value:1
    code_name:old , code_value:2
    code_name:invalid , code_value:3
    code_name:wrong , code_value:4
    code_name:incomplete , code_value:5
  • 按照列表传参
    BugCodeProcess = enum.Enum(
        value='BugCodeProcess',
        names=[
            ('new', 7),
            ('old', 6),
            ('invalid', 5),
            ('wrong', 4),
            ('incomplete', 3)
        ]
    )
    -----------------------------result---------------------------------
    code_name:new , code_value:7
    code_name:old , code_value:6
    code_name:invalid , code_value:5
    code_name:wrong , code_value:4
    code_name:incomplete , code_value:3