百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

让Python枚举更强大!教你玩转Enum扩展

off999 2025-06-15 18:36 116 浏览 0 评论

为什么你需要关注Enum?在日常开发中,你是否经常遇到这样的代码?

if status == 1:
    print("开始处理")
elif status == 2:
    print("处理中")
elif status == 3:
    print("已完成")

这些“魔法数字”虽然能用,但可读性和维护性极差。 Python 3 的Enum(枚举类)就是为此而生——它能将数字变成有意义的符号,让代码瞬间“说人话”。

一、基础操作:5分钟上手Python枚举

定义第一个枚举类

from enum import Enum

class OrderStatus(Enum):
    PENDING = 1    # 待处理
    PROCESSING = 2 # 处理中
    COMPLETED = 3  # 已完成

用法示例

current_status = OrderStatus.PROCESSING
print(current_status.value)  # 输出:2
print(current_status.name)   # 输出:'PROCESSING'

优势

  • o 避免直接操作数字,代码一目了然
  • o 防止无效值(比如status=4会直接报错)

二、进阶技巧1:动态扩展枚举成员

场景

现有OrderStatus需要新增状态CANCELLED=4,但不想修改原代码(比如枚举类来自第三方库)。

解决方案:虽然无法直接继承,但可通过组合枚举成员实现:

class ExtendedOrderStatus(Enum):
    # 直接包含原成员
    PENDING = OrderStatus.PENDING.value    # 待处理
    PROCESSING = OrderStatus.PROCESSING.value # 处理中
    COMPLETED = OrderStatus.COMPLETED.value  # 已完成
    
    CANCELLED = 4     # 新增“已取消”状态
    REFUNDED = 5      # 新增“已退款”状态
# 使用新状态
print(ExtendedOrderStatus.CANCELLED.value)  # 输出:4

三、进阶技巧2:给枚举“添加超能力”

场景

订单状态需要关联更多信息,比如状态描述、对应的操作按钮。

解决方案:在子类中添加方法!

class ExtendedOrderStatus(OrderStatus):
    CANCELLED = 4
    REFUNDED = 5

    def get_action(self):
        # 为不同状态返回操作提示
        if self == ExtendedOrderStatus.CANCELLED:
            return "联系客服申诉"
        elif self == ExtendedOrderStatus.REFUNDED:
            return "查看退款详情"
        else:
            return super().get_action()  # 调用父类逻辑(如有)

调用示例

class ExtendedOrderStatus(Enum):
    # 直接包含原成员
    PENDING = OrderStatus.PENDING.value    # 待处理
    PROCESSING = OrderStatus.PROCESSING.value # 处理中
    COMPLETED = OrderStatus.COMPLETED.value  # 已完成
    
    CANCELLED = 4     # 新增“已取消”状态
    REFUNDED = 5      # 新增“已退款”状态
    
    def get_action(self):
        # 为不同状态返回操作提示
        if self == ExtendedOrderStatus.CANCELLED:
            return "联系客服申诉"
        elif self == ExtendedOrderStatus.REFUNDED:
            return "查看退款详情"
        else:
            return super().get_action()  # 调用父类逻辑(如有)
        
status = ExtendedOrderStatus.CANCELLED
print(status.get_action())  # 输出:"联系客服申诉" 

四、避坑指南:扩展枚举的3个注意事项

1、成员名冲突
子类成员名若与父类重复,会直接报错!确保名称唯一。

2、 值无需连续
枚举值可以是任意类型(字符串、元组等),不一定用数字:

    class Priority(Enum):
        HIGH = (1, "红色")
        MEDIUM = (2, "黄色")
        LOW = (3, "绿色")

3、慎用auto()
自动赋值虽方便,但扩展时可能导致值重复,建议显式定义。

五、实战案例:枚举在业务中的妙用

场景:电商订单状态流转

from enum import Enum
class OrderStatus(Enum):
    CREATED = {"code": 10, "desc": "订单已创建"}
    PAID = {"code": 20, "desc": "已支付"}
    SHIPPED = {"code": 30, "desc": "已发货"}

    def can_cancel(self):
        # 判断当前状态是否允许取消
        return self in (OrderStatus.CREATED, OrderStatus.PAID)
        
status = OrderStatus.PAID
print(status.can_cancel())  # True

status = OrderStatus.SHIPPED
print(status.can_cancel())  # False        

通过扩展Enum,你可以:
灵活新增状态,无需修改原有代码
封装复杂逻辑,告别满屏的if-else
统一管理常量,降低维护成本

动手试试:在你的下一个项目中,用枚举替换那些“魔法数字”,感受代码质的提升吧!

相关推荐

手机万能mp4转换器(手机万能mp4转换器下载)

1你需要先下载并安装一个叫格式工厂的软件。2然后打开->mp4。3点击添加文件的选项。4然后选择需要转换的视频,点击确定。5点击确定之后,再添加到转换列表中就可以。6再点...

迅雷beta官网(迅雷beta官方网)

若手机不能安装软件/游戏,建议:1.检查“未知来源”设置是否开启。2.查看下载的软件格式是否为机器所支持的。安卓系统手机支持的软件格式为.APK格式。3.下载软件时请阅读软件详情,查看是否对机器操作系...

私人家庭影院hd免费版游戏评测

《海上钢琴师》是由朱塞佩·托纳托雷执导,蒂姆·罗斯、比尔·努恩、梅兰尼·蒂埃里主演的剧情、音乐、爱情片。该片讲述了一个被命名为“1900”的弃婴在一艘远洋客轮上与钢琴结缘,成为钢琴大师的传奇故事。该片...

题库网(题库网站有哪些)

学科网的试卷有续费的和不需要交费的两类试卷,如果你是学科网的用户,可以下载试卷,还可以组卷,对于我们一线的老师来讲,这很方便的,只要学校肯出钱,在学科网前,全校的老师就可以注册免费试用学科,网上所有的...

类似迅雷的下载器有哪些(手机下载工具app)

推荐闪电下载和黑科技下载这两款APP手机上取代迅雷的下载器有闪电下载APP和黑科下载器APP等,以这两款为例,它们都是可以支持ed2k、磁力链等下载方式,也能够支持多种不同类似的文件的高速下载。、BT...

qq号申请免费注册官网(qq注册账号免费申请网址)

你好,通用的申请QQ号码的方法如下:1、首先打开腾讯官网。2、在腾讯页面左边的通信工具里面点击号码。3、点击号码以后就会进入QQ注册页面。4、进入QQ注册页面以后,在昵称后面输入要注册号码的名字。5、...

安卓安装windows(安卓安装apk解析包出错)

oppo手机支持安卓和Windows操作系统,但是双系统安装需要手机支持虚拟化技术(VT)。如果手机支持VT,可以在电脑上安装虚拟化软件,然后在手机上运行VT兼容的虚拟化应用程序,从而实现在电脑上安装...

安全中心下载(网易安全中心下载)

可以通过解除保护模式页面,查看QQ帐号进入保护模式的原因,及获取恢复QQ帐号正常使用的方法。点击小i,然后把自动登录选项去掉,打开safari,随便点一个网页,去登录。畅游经常这样抽风,可以关了游戏...

重装系统步骤(USB重装系统步骤)

正版的win10及以上系统,现在已经都自带系统重置功能,可以一键重置恢复到出厂设置。1.按住win+i,在弹出的windows设置对话框中,点击更新和安全选项,在弹出的设置对话框中,点击左侧的恢复选项...

qq群发软件手机版免费(qq群发软件安卓版免费下载)

分享一个可以免费试用的软件,“www.liaotiangou.com”在做微信营销的时候经常会需要使用到群发功能,出了多群群发之外,还有定时群发,甚至是定时发送朋友圈。多群群发可以解决以前最多只能群发...

小说排行榜2020前十名(耿美小说排行榜2020前十名)

1、元龙《元龙》是目前2020年哔哩哔哩国创动漫热门榜的第一名,讲述的是一名来自现代的王牌狙击手,穿越到了玄幻的元魂世界,从此展开的一系列热血的战斗与机遇,成为元魂世界的霸者的故事。2、灵笼《灵笼》是...

万能wifi密码查看器(wifi万能密码查看神器)

极速版Wifi的好。万能Wifi锁匙极速版的内存小,节约流量,操作简便,还可以连接手机在户外共享网络信息,是一款性价比很高的索要产品。不过要根据自己的实际情况做出正确的选择才好。首先需要一个安卓机,拿...

造梦西游5(造梦西游5论坛)

1、迅速做完主线任务和支线任务主线、支线任务存在于底部的【任务】里,要找对位置!任务上有【可接】两个字样,说明还没接受相应的任务!你看过一个【化世桥】就有接近10W的经验,何乐而不为,所以想尽快升级就...

office免费永久激活密钥(office免费永久激活密钥irm)

回答如下:Office2019永久激活密钥可以用于激活MicrosoftOffice2019产品,包括Word、Excel、PowerPoint、Outlook、Access、Publisher等...

可以加微信的交友软件(50至60岁交友微信群)

如果您想在寻爱APP中添加微信好友,可以按照以下步骤进行操作:1.打开寻爱APP,在APP主界面找到您想要添加好友的用户的信息。2.点击该用户的头像或昵称,进入该用户的详细资料页面。3.在详细资...

取消回复欢迎 发表评论: