Python 自带的Enum优化

本文讨论了如何改进Python标准库中的Enum类,以避免在处理值时需要加.value的问题,特别是对于数据库操作等场景。虽然包含一些兼容性代码,但主要关注优化Enum的使用体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于Python官方的Enum使用值时,写数据库等时需要加.value,容易引起问题,故而重写了enum。

有一些兼容性代码,可以去掉,这里就不做优化了。

# coding: utf-8
"""
Enum对象,由于python 提供的包enum34中的Enum、IntEnum在使用过程中容易出现忘记加.value后缀等情况,非常容易出现bug,比如在落库的时候,Enum类型
的数据在做In判断的时候,都十分的容易出错,故此自己开发了一套Enum。本着使用简单的原则,防了Enum34中的概念,加之__choices__的概念,做了如下实现,自带验证功能。

使用方式与头条系统中的enum34几乎没有差别,使用方式如下。
class Example(Enum):
    a = 1
    b = 2

    __choices__ = (
        (a, u'测试样例a'),
        (b, u'测试样例b'),
    )


>> Example['a']  # 通过名字来找到值
Out: 1
>> Example[1]  # 通过值来找到值
Out: 1
>> c = Example[3]
Out: ValueError: 3
>> c = Example['c']
Out: KeyError: c

>> a1 = Example[1]
>> print a1
Out: 1
>> a1.label
Out: u'测试样例a'
>> a1.name
Out: a

"""
from __future__ import unicode_literals


class NewInt(int):
    &#
### 使用 `enum` 模块创建枚举类型 在 Python 中,枚举类型是通过标准库中的 `enum` 模块来定义的。这使得开发者能够轻松地创建一组命名常量,适用于表示固定数量的选择项。 #### 定义简单的枚举类型 下面是一个基本的例子,展示了如何使用 `Enum` 类来定义一个名为 `Color` 的枚举: ```python from enum import Enum, auto class Color(Enum): RED = 1 GREEN = 2 BLUE = 3 ``` 这里,`RED`, `GREEN`, 和 `BLUE` 是三个不同的枚举成员,它们各自拥有独一无二的名字和对应的值[^1]。 #### 自动分配值给枚举成员 如果不想手动指定每个枚举成员的具体数值,则可以利用 `auto()` 函数让系统自动为其赋值: ```python from enum import Enum, auto class Direction(Enum): UP = auto() DOWN = auto() LEFT = auto() RIGHT = auto() ``` 这样做的好处是可以简化代码编写过程,并减少潜在的人为错误[^4]。 #### 访问枚举成员及其属性 一旦定义好了枚举类之后,就可以像访问普通对象一样获取其内部的数据了。例如: ```python print(Color.RED.name) # 输出 "RED" print(Direction.UP.value) # 可能会输出 1 或其他由 auto() 自动生成的整数 ``` 此外还可以遍历整个枚举集合并打印出所有的成员名与值组合: ```python for color in Color: print(f"{color.name} -> {color.value}") ``` 以上就是关于 Python 中 `enum` 模块的基础介绍以及一些常见的操作方式[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值