枚举是常用的功能,看看Python的枚举.

from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
@unique
class Weekday(Enum):
Sun = # Sun的value被设定为0
Mon =
Tue =
Wed =
Thu =
Fri =
Sat =
for name, member in Month.__members__.items():
print(name, '=>', member, ',', member.value)

枚举的定义

  1. 首先,定义枚举要导入enum模块。
  2. 枚举定义用class关键字,继承Enum类

注意:

  定义枚举时,成员名称不允许重复 

  默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名 

   如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员

 如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】


for name, member in Month.__members__.items():
print(name, '=>', member, ',', member.value)

我们就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员.

访问这些枚举类型可以有若干种方法:

枚举支持迭代器,可以遍历枚举成员

>>> day1 = Weekday.Mon
>>> print(day1)
Weekday.Mon
>>> print(Weekday.Tue)
Weekday.Tue
>>> print(Weekday['Tue'])
Weekday.Tue
>>> print(Weekday.Tue.value) >>> print(day1 == Weekday.Mon)
True
>>> print(day1 == Weekday.Tue)
False
>>> print(Weekday())
Weekday.Mon
>>> print(day1 == Weekday())
True
>>> Weekday()
Traceback (most recent call last):
...
ValueError: is not a valid Weekday
>>> for name, member in Weekday.__members__.items():
... print(name, '=>', member)
...
Sun => Weekday.Sun
Mon => Weekday.Mon
Tue => Weekday.Tue
Wed => Weekday.Wed
Thu => Weekday.Thu
Fri => Weekday.Fri
Sat => Weekday.Sat

枚举取值 总结:

通过成员的名称来获取成员;通过成员值来获取成员;通过成员,来获取它的名称和值.

注意: Enum 的成员均为单例(Singleton),并且不可实例化,不可更改.

枚举是可以比较的:

举成员可进行同一性比较,可进等值比较,不能进行大小比较.

总结:Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较,并且枚举有多种实现方法。

最新文章

  1. java的前台与后台
  2. 【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示
  3. 去除行内(inline/inline-block)元素之间的间距
  4. LVS负载均衡集群服务搭建详解(一)
  5. URAL 1009 K-based numbers(DP递推)
  6. POJ 3630- Phone List(Trie)
  7. 怎么通过IE连接本机oracle数据库
  8. Asp.net Repeater控件
  9. asp.net弹出层实例
  10. 关于使用 jBox 对话框的提交问题
  11. strstr库函数实现
  12. VMware中Ubuntu 14.04出现Unknown Display问题解决
  13. Html 段落自动换行
  14. Go基础之--接口
  15. css3学习之旅-css的基本语法(1)
  16. AppBoxFuture(二): Say goodbye to sql!
  17. gitlab 注册runner
  18. JavaWeb 并发:FOR UPDATE 实战,监测并解决。
  19. C#中哈希表(HashTable)的用法详解以及和Dictionary比较
  20. 【Linux】fg、bg让你的进程在前后台之间切换

热门文章

  1. VMWare下ubuntu无法全屏的问题解决
  2. SQL Server 数据库连接方法
  3. Spring Cloud 学习笔记(一)——入门、特征、配置
  4. 1008 Elevator
  5. NancyFx 2.0的开源框架的使用-Basic
  6. LINQ基础(一)
  7. [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A
  8. 关于Dubbo一个接口多个实现的解决方案
  9. 基于HTML5快速搭建TP-LINK电信拓扑设备面板
  10. .Net程序员学用Oracle系列(8):触发器、作业、序列、连接