Python 学习之枚举类

使用

Python 中我们使用 Enum 来定义了一个枚举类。

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

from enum import Enum

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

# 遍历枚举类型
for name, member in Month.__members__.items():
    print(name, '---------', member, '----------', member.value)

# 直接引用一个常量
print('\n', Month.Jan)

上面的代码,我们创建了一个有关月份的枚举类型 Month ,这里要注意的是构造参数,第一个参数 Month 表示的是该枚举类的类名,第二个 tuple 参数,表示的是枚举类的值;当然,枚举类通过 members 遍历它的所有成员的方法。

注意的一点是 , member.value 是自动赋给成员的 int 类型的常量,默认是从 1 开始的。

而且 Enum 的成员均为单例(Singleton),并且不可实例化,不可更改。

自定义枚举类

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' set '

__author__ = 'Kevin Gong'

from enum import Enum, unique

@unique
class Weekday(Enum):
    Sun = 0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6

day1 = Weekday.Mon

print('day1 =', day1)
print('Weekday.Tue =', Weekday.Tue)
print('Weekday[\'Tue\'] =', Weekday['Tue'])
print('Weekday.Tue.value =', Weekday.Tue.value)
print('day1 == Weekday.Mon ?', day1 == Weekday.Mon)
print('day1 == Weekday.Tue ?', day1 == Weekday.Tue)
print('day1 == Weekday(1) ?', day1 == Weekday(1))

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

结果:

day1 = Weekday.Mon
Weekday.Tue = Weekday.Tue
Weekday['Tue'] = Weekday.Tue
Weekday.Tue.value = 2
day1 == Weekday.Mon ? True
day1 == Weekday.Tue ? False
day1 == Weekday(1) ? True
Sun => Weekday.Sun
Mon => Weekday.Mon
Tue => Weekday.Tue
Wed => Weekday.Wed
Thu => Weekday.Thu
Fri => Weekday.Fri
Sat => Weekday.Sat

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

猜你喜欢

转载自blog.csdn.net/duoduo_11011/article/details/106389529
今日推荐