python3小白课:可以被枚举的类
有时候,我们需要定义一个类似下拉列表条目的东西,这个类是可以被枚举的,比如一年只有四个季节,一年只有12个月等,它们也可以弄成一个类供选择和调用。
直接创建枚举类
来看看小例子吧:
# coding:utf-8
import enum
Season = enum.Enum('Season', ('SPRING', 'SUMMER', 'FALL', 'WINTER'))
这里我们定义了一个季节枚举类,有四个季节,用了内置enum包中的Enum函数来构造,第一个参数为枚举类的类名,第二个参数为一个元组,每个元素就是每个枚举值。
访问枚举类中的成员
定义枚举类之后,每个成员都有name和value两个属性,name为枚举值的名称,value为枚举值的序号(从1开始)。
如上述的定义季节的例子,我们就可以这样查看:
# coding:utf-8
import enum
Season = enum.Enum('Season', ('SPRING', 'SUMMER', 'FALL', 'WINTER'))
print(Season.SUMMER)
print(Season.SUMMER.name)
print(Season.SUMMER.value)
也可以根据名称或者序号来访问:
# coding:utf-8
import enum
Season = enum.Enum('Season', ('SPRING', 'SUMMER', 'FALL', 'WINTER'))
print(Season['FALL'])
print(Season(1))
还可以通过__members__属性来获取,这个属性可以返回一个字典dict,可以进行解析显示,看例子:
# coding:utf-8
import enum
Season = enum.Enum('Season', ('SPRING', 'SUMMER', 'FALL', 'WINTER'))
print(Season.__members__)
for name, member in Season.__members__.items():
print("%s => %s, %s" % (name, member.name, member.value))
为枚举类定义额外方法
通过继承Enum来派生枚举类,可以给新的枚举类定义特有的方法,这是高级定义枚举类的方法:
# coding:utf-8
import enum
class Season(enum.Enum):
# 先指定value值,不一定要是数字
SPRING = '春'
SUMMER = '夏'
FALL = '秋'
WINTER = '冬'
# 可以定义特有的方法
def get_month(self):
if self.value == '春':
month = "1-3月"
elif self.value == '夏':
month = "4-6月"
elif self.value == '秋':
month = "7-9月"
elif self.value == '冬':
month = "10-12月"
print("这是一个在【%s】的季节" % month)
# 用各种方式来查看这样定义的结果展现
print(Season.WINTER)
print(Season.WINTER.name)
print(Season.WINTER.value)
Season.FALL.get_month()
for name, member in Season.__members__.items():
print("%s => %s, %s" % (name, member.name, member.value))
可以看到,通过这样的高级枚举,我们可以定义特有的方法,做一些针对性的处理等等。如有需要,可以选用。
单词释义
| 单词 | 释义 |
|---|---|
| enum | 列举型别 |
| Season | 季节 |
| SPRING | 春季 |
| SUMMER | 夏季 |
| FALL | 秋季 |
| WINTER | 冬季 |
| name | 名称 |
| value | 值 |
| member | 成员,members为复数形式 |
| item | 一件物品,items为复数形式 |
| get | 获取 |
| month | 月份 |