免费的个人主页网页制作网站,东阳市城建设局网站,petit模板wordpress,小学学校网站模板Python中的Enum
Enum#xff08;枚举#xff09;在很多应用场景中都会出现#xff0c;因此绝大部分编程语言都实现了Enum类型#xff0c;Python也不列外#xff0c;但列外的是Enum在Python3.4中才被正式支持#xff0c;我们先来看看Python3中的Enum是怎么使用的。 枚举的…Python中的Enum
Enum枚举在很多应用场景中都会出现因此绝大部分编程语言都实现了Enum类型Python也不列外但列外的是Enum在Python3.4中才被正式支持我们先来看看Python3中的Enum是怎么使用的。 枚举的创建方式很简单就像创建一个类一样只需继承Enum from enum import Enumclass Role(Enum):
... admin 1
... manager 2
... guest 3它的语法和定义class完全是一样的但它并不是一个真正的class。这里的Role是Enum类型里面的成员admin,manager都是它的实例对象它们的类型是Role类型的 type(Role)
class enum.EnumMetatype(Role.admin)
enum Role枚举的每一个实例对象都有自己的名字和值 Role.admin.name
adminRole.admin.value
1枚举内部更像是一个OrderedDict
Role.__members__
mappingproxy(OrderedDict([(admin, Role.admin: 1), (manager, Role.manager: 2), (guest, Role.guest: 3)]))Python2.x
#!/usr/bin/env python
# -*- coding: utf-8 -*-__author__ liuzhijundef enum(name, *sequential, **named):values dict(zip(sequential, range(len(sequential))), **named)values[values] values.values()# NOTE: Yes, we *really* want to cast using str() here.# On Python 2 type() requires a byte string (which is str() on Python 2).# On Python 3 it does not matter, so well use str(), which acts as# a no-op.# return type(str(name), (), values)import collectionsaa collections.namedtuple(str(name), values.keys())return aa(**values)JobStatus enum(JobStatus,QUEUEDqueued,FINISHEDfinished,FAILEDfailed,STARTEDstarted,DEFERREDdeferred
)print JobStatus.QUEUED
print JobStatus.FAILED
print JobStatus.STARTED
print JobStatus._fields
print JobStatus.values