Python 枚举(enum)

枚举(enum)

1.枚举模块enum

从3.x开始python提供了enum模块来提供枚举的功能,在使用时通过from enum import Enum 来引入。开发人员需要自己定义一个继承Enum的类来实现枚举类型对象。python的枚举是使用类来实现的,类属性是枚举名称,属性值对应枚举值。Enum的使用有如下特点:

  1. 枚举类不允许定义相同枚举名称,但不同的枚举名称可以有相同的值,后者相当于前者的别名。
  2. 枚举值不能被修改,枚举值一旦被修改,就会引发AttributeError异常。
  3. 两个不同的枚举类,枚举名称和枚举值即便相同,在比较时也是不相等的。
  4. 枚举类的一个枚举有name(标签)和value(枚举值)两个属性,使用枚举值时,务必通过value获取枚举值。

2. Enum使用示例

import enum
class ColorCode(enum.Enum):
RED = 1
BLUE = 2
BLACK = 3
def print_color(color_code):
if color_code == ColorCode.RED.value:
print('红色')
elif color_code == ColorCode.BLUE.value:
print('蓝色')
elif color_code == ColorCode.BLACK.value:
print('黑色')

3. 枚举值

3.1 枚举值唯一

枚举值理论上是允许重复的,如果不希望出现枚举值重复的情况,可以使用enum模块提供的unique装饰器

import enum
from enum import unique
@unique
class ColorCode(enum.Enum):
RED = 1
BLUE = 1
BLACK = 3

3.2 枚举值遍历

使用for循环可以对枚举值进行遍历,枚举有name和value两个属性,name就是枚举类的类属性,value则是类属性的值。

import enum
from enum import unique
@unique
class ColorCode(enum.Enum):
RED = 1
BLUE = 2
BLACK = 3
for color in ColorCode:
print(color.name, color.value)

程序输出结果

RED 1
BLUE 2
BLACK 3

3.3 枚举值比较

两个枚举值之间只支持身份运算符is和比较运算符==进行比较。以4.2 小结的代码为例演示枚举值如何进行比较。

print(ColorCode.RED == ColorCode.RED) # True

这看起来没有什么特别,但如果使用枚举和对应的值进行比较,就会产生一些出乎意料的结果

print(ColorCode.RED == 1) # False

这是非常容易出错的地方,很多人相当然的认为ColorCode.RED与1是相等的,但真实的结果却是False,RED是一项枚举,枚举有name和value两个属性,必须通过value才能获得真实的枚举值

print(ColorCode.RED.value == 1) # True

或者换一个思路,将枚举值转成枚举类型

print(ColorCode.RED == ColorCode(1)) # True

ColorCode(1)) 的结果正是ColorCode.RED。

posted @   饮一杯天上水  阅读(696)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示