Python 枚举

本文介绍了Python中的枚举类,枚举用于建立固定的值映射关系,例如流程状态和网站用户状态。枚举提供了一种不可变且具有唯一性的类型,避免了使用字典可能导致的问题。文章通过示例展示了如何创建和访问枚举对象,以及枚举的遍历特性。枚举在值相同的情况下,即使名称不同也会被视为同一类型。
摘要由CSDN通过智能技术生成

在python里,枚举对象就是一个类,比较简单的方式就是定义一个类,并让它继承enum.Enum。枚举的用处在于建立一套两组值之间的映射关系。比如,流程状态有“流转中”、“已关闭”、“手动结束”等;网站用户状态有“未注册”、“已注册”、“已注销”。这些状态在数据库存储时,考虑性能,往往会用数字,如0、1、2表示。而如果在代码里直接写数字又是十分不友好的行为。因此,一套映射关系就可以方便在两组数据间进行转换。很容易的,我们会想到字典就能实现这个功能。但是,字典是可变对象。而上面的场景中,我们肯定希望的是一个固定不变的关系。

1、实现一个枚举类

from enum import Enum


class Color(Enum):
    RED = '#F44336'
    BLUE = '#2196F3'
    GREEN = '#4CAF50'

我们在开发网页的时候,为了更好的视觉效果。我们会自定义一些常用的颜色。枚举除了不可修改以外,还有个特点就是会对名称和值均进行唯一校验。对名称进行唯一校验和字典校验主键一样,而当两个枚举类型的值相同时,会被认为是同一个枚举类型。

class Color(Enum):
    RED = '#F44336'
    # 值相同的会被认为是同一个枚举类型,这里可以理解为别名
    Red = '#F44336'
    BLUE = '#2196F3'
    GREEN = '#4CAF50'

2、访问枚举对象

# 获取某一个枚举值,这个相当于已知名称获取值
print(Color.RED.value)
# 获取一个枚举类型
print(Color.RED)
print(Color['Red'])
# 获取枚举名称(字符串)
print(Color.RED.name)
# 类型转换,这个相当于已知值获取类型
print(Color('#2196F3'))


# 输出:
    #F44336
    Color.RED
    Color.RED
    RED
    Color.BLUE

3、遍历枚举对象

for c in Color:
    print(c)


# 输出:
    Color.RED
    Color.BLUE
    Color.GREEN

这里就可以看到,虽然我们定义了两个“红色”。但因为值是相同的,因此会被认为是同一个枚举类型。当然,如果我们想将'Red'也打印出来,可以这样做

# 会打印别名
for c in Color.__members__.items():
    print(c)


# 输出:
    ('RED', <Color.RED: '#F44336'>)
    ('Red', <Color.RED: '#F44336'>)
    ('BLUE', <Color.BLUE: '#2196F3'>)
    ('GREEN', <Color.GREEN: '#4CAF50'>)

从这个结果也可以看出,RED和Red虽然名称不同,但都是同一个枚举类型。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值