title: 简单使用一下 Python enumdescription: 呃,这个 enum…
redirect: 2020-11-02-python-enum

description: 呃,这个 enum…

Why

先看一下日常代码中用常量处理逻辑的代码写法

  1. # Example 1
  2. if index == 10:
  3. dosomething()
  4. # Example 2
  5. MAX_INDEX = 10
  6. if index = MAX_INDEX:
  7. dosomething()
  8. # Example
  9. from enum import IntEnum
  10. class Index(IntEnum):
  11. MAX = 10
  12. MIN = 0
  13. if index = Index.MAX:
  14. dosomething()

如果你对你的 code 有一定的要求, 有时候你会用枚举类来替代一些数字字面量

Python Enum

enum 是 Python 自 3.4 版本引入的内置模块

创建一个 Enum

  1. from enum import Enum
  2. class Color(Enum):
  3. RED = 1
  4. GREEN = 2
  5. BLUE = 3

使用

  1. >>> Color.RED
  2. <Color.RED>
  3. >>> Color.RED.name
  4. Color
  5. >>> Color.RED.value
  6. 1

确保唯一的枚举值

使用装饰器 enum.uniqu

  1. from enum import Enum, unique
  2. @unique
  3. class Mistake(Enum):
  4. ONE = 1
  5. TWO = 2
  6. THREE = 3
  7. FOUR = 3

使用自动设置的值

  1. from enum import Enum, auto
  2. class Color(Enum):
  3. RED = auto()
  4. BLUE = auto()
  5. GREEN = auto()
  6. list(Color)

使用 _generate_next_value_() 重载 auto() 赋值

  1. class AutoName(Enum):
  2. def _generate_next_value_(name, start, count, last_values):
  3. return name
  4. class Ordinal(AutoName):
  5. NORTH = auto()
  6. SOUTH = auto()
  7. EAST = auto()
  8. WEST = auto()
  9. list(Ordinal)

References