摘要:classPriority(Enum):HIGH = (1, "红色")MEDIUM = (2, "黄色")LOW = (3, "绿色")
为什么你需要关注Enum?在日常开发中,你是否经常遇到这样的代码?
if status == 1:print("开始处理")
elif status == 2:
print("处理中")
elif status == 3:
print("已完成")
这些“魔法数字”虽然能用,但可读性和维护性极差。 Python 3 的Enum(枚举类)就是为此而生——它能将数字变成有意义的符号,让代码瞬间“说人话”。
一、基础操作:5分钟上手Python枚举
定义第一个枚举类
from enum import EnumclassOrderStatus(Enum):
PENDING = 1# 待处理
PROCESSING = 2# 处理中
COMPLETED = 3# 已完成
用法示例:
current_status = OrderStatus.PROCESSINGprint(current_status.value) # 输出:2
print(current_status.name) # 输出:'PROCESSING'
优势:
避免直接操作数字,代码一目了然防止无效值(比如status=4会直接报错)场景:
现有OrderStatus需要新增状态CANCELLED=4,但不想修改原代码(比如枚举类来自第三方库)。解决方案:虽然无法直接继承,但可通过组合枚举成员实现:
classExtendedOrderStatus(Enum):# 直接包含原成员
PENDING = OrderStatus.PENDING.value # 待处理
PROCESSING = OrderStatus.PROCESSING.value # 处理中
COMPLETED = OrderStatus.COMPLETED.value # 已完成
CANCELLED = 4# 新增“已取消”状态
REFUNDED = 5# 新增“已退款”状态
# 使用新状态
print(ExtendedOrderStatus.CANCELLED.value) # 输出:4
三、进阶技巧2:给枚举“添加超能力”
场景:
订单状态需要关联更多信息,比如状态描述、对应的操作按钮。
解决方案:在子类中添加方法!
classExtendedOrderStatus(OrderStatus):CANCELLED = 4
REFUNDED = 5
defget_action(self):
# 为不同状态返回操作提示
if self == ExtendedOrderStatus.CANCELLED:
return"联系客服申诉"
elif self == ExtendedOrderStatus.REFUNDED:
return"查看退款详情"
else:
return super.get_action # 调用父类逻辑(如有)
调用示例:
classExtendedOrderStatus(Enum):# 直接包含原成员
PENDING = OrderStatus.PENDING.value # 待处理
PROCESSING = OrderStatus.PROCESSING.value # 处理中
COMPLETED = OrderStatus.COMPLETED.value # 已完成
CANCELLED = 4# 新增“已取消”状态
REFUNDED = 5# 新增“已退款”状态
defget_action(self):
# 为不同状态返回操作提示
if self == ExtendedOrderStatus.CANCELLED:
return"联系客服申诉"
elif self == ExtendedOrderStatus.REFUNDED:
return"查看退款详情"
else:
return super.get_action # 调用父类逻辑(如有)
status = ExtendedOrderStatus.CANCELLED
print(status.get_action) # 输出:"联系客服申诉"
1、成员名冲突
子类成员名若与父类重复,会直接报错!确保名称唯一。
HIGH = (1, "红色")
MEDIUM = (2, "黄色")
LOW = (3, "绿色")
慎用auto自动赋值虽方便,但扩展时可能导致值重复,建议显式定义。
五、实战案例:枚举在业务中的妙用
场景:电商订单状态流转
from enum import EnumclassOrderStatus(Enum):
CREATED = {"code": 10, "desc": "订单已创建"}
PAID = {"code": 20, "desc": "已支付"}
SHIPPED = {"code": 30, "desc": "已发货"}
defcan_cancel(self):
# 判断当前状态是否允许取消
return self in (OrderStatus.CREATED, OrderStatus.PAID)
status = OrderStatus.PAID
print(status.can_cancel) # True
status = OrderStatus.SHIPPED
# False
通过扩展Enum,你可以:
✅ 灵活新增状态,无需修改原有代码
✅ 封装复杂逻辑,告别满屏的if-else
✅ 统一管理常量,降低维护成本
动手试试:在你的下一个项目中,用枚举替换那些“魔法数字”,感受代码质的提升吧!
推荐好书:这是鸢尾花书系中最实用最基础的一本,本书关注于与机器学习相关的Python编程,入门人工智能编程,这一本是很不错的选择。让读者可以通过Python语言更好地了解与人工智能相关的数学和应用。
来源:慧德教教育