枚举类在Java中并不陌生,本文将解释为什么在Python中要使用枚举类。想象一个问题,如果在项目中处理通过RestAPI请求返回的JSON数据,其中一种数据格式如下:{metrics:'speed',value:20,weekday:'Mon'}你需要处理数据,放入字符将字符串类型的星期几转换成数值类型的1、2、3、4、5、6、7应该怎么做?Mon=1Tue=2Wed=3Thu=4Fri=5Sat=6Sun=7通过定义常量来预定义一对一的映射关系。如果你有一点Python开发经验,大部分都会选择字典的形式来解决:weekday={'Mon':1'Tue':2'Wed':3'Thu':4'Fri':5'Sat':6'Sun':7}通过键值获取对应的数值。不过我在另一篇文章(FromBronzetoKing,一篇教你节省90%内存)中介绍过,Python中的字典是一种非常耗内存的数据存储方式。如果你看了我的文章,你可能会有很多新的想法,比如用class方法实现枚举关系,classWeekday:Mon=1Tue=2Wed=3Thu=4Fri=5Sat=6Sun=7但是,以上方法在数据持久化和可扩展性方面都不是最理想的方案。如果你有一定的Java开发经验,遇到这样的问题,你一定会第一时间想到一个概念——枚举类。enumWeekday{MON(1,"星期一"),TUE(2,"星期二"),WED(3,"星期三"),THU(4,"星期四"),FRI(5,"星期五"),SAT(6,"星期六"),SUN(7,"星期六");publicfinalintint值;publicfinal字符串中文;Weekday(intintValue,Stringchinese){this.intValue=intValue;this.chinese=中文;}}通过下面的方法,你可以访问枚举类中的值,publicclassApp{publicstaticvoidmain(String[]args){Weekdayday=Weekday.MON;System.out.println(day.intValue);System.out.println(day.chinese);}}Java中的枚举类具有安全、标准化等诸多优点,因此非常流行。那么,Python中是否可以使用枚举类来解决类似的枚举问题呢?答案是肯定的。Python中提供了一个标准的枚举库,调用继承即可实现Python枚举类。有两种方法可以实现这一点。方法一:类继承#demo.pyfromenumimportEnumclassWeekday(Enum):Mon=1Tue=2Wed=3Thu=4Fri=5Sat=6Sun=7print(Weekday)print(Weekday.Mon)print(Weekday.Mon.value)看输出,$pythondemo.py
