枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能:

from enum import EnumMonth = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) 

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

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

value属性则是自动赋给成员的int常量,默认从1开始计数。

如果需要更精确地控制枚举类型,可以从Enum派生出自定义类:

from enum import Enum, unique@unique
class Weekday(Enum): Sun = 0 # Sun的value被设定为0 Mon = 1 Tue = 2 Wed = 3 Thu = 4 Fri = 5 Sat = 6 

@unique装饰器可以帮助我们检查保证没有重复值。

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

>>> day1 = Weekday.Mon
>>> print(day1)
Weekday.Mon
>>> print(Weekday.Tue)
Weekday.Tue
>>> print(Weekday['Tue']) Weekday.Tue >>> print(Weekday.Tue.value) 2 >>> print(day1 == Weekday.Mon) True >>> print(day1 == Weekday.Tue) False >>> print(Weekday(1)) Weekday.Mon >>> print(day1 == Weekday(1)) True >>> Weekday(7) Traceback (most recent call last): ... ValueError: 7 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 

可见,既可以用成员名称引用枚举常量,又可以直接根据value的值获得枚举常量。

转载于:https://www.cnblogs.com/niulang/p/9035203.html

Python实用笔记 (27)面向对象高级编程——使用枚举类相关推荐

  1. Python学习笔记:面向对象高级编程(完)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  2. Python学习笔记:面向对象高级编程(中下)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  3. Python学习笔记:面向对象高级编程(中上)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. Python学习笔记:面向对象高级编程(上)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. 【廖雪峰Python学习笔记】面向对象高级编程

    文章目录 为实例和类绑定属性和方法 \_\_slots__限制当前class实例,对子类不管用 @property装饰器,将`getter`方法变成属性 多重继承 -- 一个子类可同时获得多个父类的所 ...

  6. 侯捷C++课程笔记01: 面向对象高级编程(上)

    本笔记根据侯捷老师的课程整理而来:C++面向对象高级编程(上) pdf版本笔记的下载地址: 笔记01_面向对象高级编程(上),排版更美观一点(访问密码:3834) 侯捷C++课程笔记01: 面向对象高 ...

  7. 侯捷C++课程笔记02: 面向对象高级编程(下)

    本笔记根据侯捷老师的课程整理而来:C++面向对象高级编程(下) pdf版本笔记的下载地址: 笔记02_面向对象高级编程(下),排版更美观一点(访问密码:3834) 侯捷C++课程笔记02: 面向对象高 ...

  8. 侯捷C++视频笔记——C++面向对象高级编程(上)

    C++面向对象高级编程(上) 01.C++编程简介 学习目标: 1.学习良好的编写C++类的形式,包括两种,分别是无指针成员类(如Complex)和有指针成员类(如String) 2.学习类之间的关系 ...

  9. 侯捷C++视频笔记——C++面向对象高级编程(下)

    C++面向对象高级编程(下) 01.简介 学习目标: 1.探讨上篇没有探讨过的问题 2.继续深入了解面向对象,包括虚指针,虚表,虚函数,以及多态 02.转换函数与explicit 1.转换函数 转换函 ...

  10. python getitem_python Class:面向对象高级编程 __getitem__

    官网解释:object.__getitem__(self, key) Called to implement evaluation of self[key]. For sequence types,t ...

最新文章

  1. 把博士男友的论文和资料全删了,然后……
  2. DNS浅析-Bind软件的使用及搭建一个简单的DNS缓存服务器
  3. excel 两组数据交点_初识Python 数据可视化
  4. oracle存储过程实现根据已有数据批量更新另一批数据
  5. 看到这一幕,我甚至都想戒烟了。。 | 今日最佳
  6. python大于小于_在Python中大于/小于Pandas DataFrames / Series之间的比较
  7. 计算机学院足球队 英语怎么说,计算机学院举办2018届毕业生足球赛
  8. 探究Lucene计算权重的过程
  9. 洞仙歌·冰肌玉骨 [宋] 苏轼
  10. 国内数据中心变革的见证者,揭秘阿里巴巴数据中心技术积淀
  11. html5长按 排序,H5 长按 拖拽排序的实现
  12. web前端基础之JS
  13. bgp属性分析--ORIGIN
  14. 8款最受欢迎的HTML5/CSS3应用及源码
  15. 词云中去重复的词_今天从零教你开始利用Python打造词云图!
  16. c语言music算法,PROJECT:以music算法为基础的几种DOA算法的研究及性能分析
  17. android实现弹框动画,android对话框弹出方式动画
  18. chrome小恐龙作弊代码
  19. 解决报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: “
  20. 在creo中,如何在轴上画一个键槽?

热门文章

  1. System.IO.Ports.SerialPort串口通信接收完整数据
  2. Android中Bitmap,byte[],Drawable相互转化
  3. 密实逃脱1深红色房间攻略
  4. 30岁之前创业想成功必看
  5. python时间操作代码
  6. 【NAACL2021】基于隐式类别建模的非自回归式翻译
  7. 20200210_logistic回归来预测违约的概率
  8. NLP学习—17.基于BM25、tfidf和SIF的检索系统实现
  9. pytorch相关用法
  10. 书单丨被强化学习一次次伤害?本书单带你一步步入门!