一文读懂一文读懂Python 枚举枚举
enum 是一组绑定到唯一常数值的符号名称,并且具备可迭代性和可比较性的特性。我们可以使用 enum 创建具有良好定义的
标识符,而不是直接使用魔法字符串或整数,也便于开发工程师的代码维护。
创建枚举创建枚举
我们可以使用 class 语法创建一个枚举类型,方便我们进行读写,另外,根据函数 API 的描述定义,我们可以创建一个 enum 的
子类,如下:
from enum import Enum
class HttpStatus(Enum):
OK = 200
BAD_REQUEST = 400
FORBIDDEN = 403
NOT_FOUND = 404
REQUEST_TIMEOUT = 408
SERVICE_UNAVAILABLE = 500
注意: 枚举属性值可以是任何东西: int, str 等。如果确切的值不重要,您可以使用 auto 实例,并为您选择适当的
值。如果您将 auto 与其他值混合,则必须小心。 枚举类型中,不可以设置相同名称的 name,可以有相同的
value。
enum 自带属性 name 和 value,日常工作中使用最多的也是这两个属性,我们打印看看结果:
print('Member: {}'.format(HttpStatus.OK)) # Member: HttpStatus.OK
print('Member name: {}'.format(HttpStatus.OK.name)) # Member name: OK
print('Member value: {}'.format(HttpStatus.OK.value)) # Member value: 200
print(repr(HttpStatus.OK)) # <enum 'HttpStatus'>
print(type(HttpStatus.OK)) # <HttpStatus.OK: 200>
print(isinstance(HttpStatus.OK, HttpStatus)) # True
枚举迭代枚举迭代
枚举支持迭代和遍历顺序。举个例子:
from enum import Enum, auto
# 创建
class HttpStatus(Enum):
OK = 200
BAD_REQUEST = 400
FORBIDDEN = 403
NOT_FOUND = 404
REQUEST_TIMEOUT = 408
SERVICE_UNAVAILABLE = 500
OTHER = auto.value
# 迭代
for status in HttpStatus:
print('{} : {}'.format(status.name, status.value))
打印结果:
OK : 200
BAD_REQUEST : 400
FORBIDDEN : 403
NOT_FOUND : 404
REQUEST_TIMEOUT : 408
SERVICE_UNAVAILABLE : 500
OTHER : <object object at 0x000002863E1D7B10>
可以看出,遍历的每一个 status 是一个独立的枚举成员,拥有 name 和 value 属性。
另外,我们也可以使用如下形式来进行枚举遍历:
for name, member in HttpStatus.__members__.items():