python3xiaobaike_2020/chapter7/7-9 python3小白课:可以被枚举的类.md
2025-04-20 23:22:14 +08:00

3.3 KiB
Raw Blame History

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 月份