【Python】枚举的使用

原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。



前言

枚举是一组符号名称(枚举成员)的集合,枚举成员应该是唯一的、不可变的。在枚举中,可以对成员进行恒等比较,并且枚举本身是可迭代的。


一、枚举示例

在 Python 中,可以使用 enum 模块来实现枚举。具体可以按照以下步骤进行:

  1. 导入 enum 模块
from enum import Enum
  1. 创建枚举类
class Weekday(Enum):
    Monday = 1
    Tuesday = 2
    Wednesday = 3
    Thursday = 4
    Friday = 5
    Saturday = 6
    Sunday = 7
  1. 使用枚举类
print(Weekday.Monday) # Weekday.Monday
print(Weekday.Monday.value) # 1
print(Weekday(1)) # Weekday.Monday
print(Weekday(1).name) # Weekday.Monday
print(Weekday['Monday']) # Weekday.Monday
print(Weekday['Monday'].value) # Weekday.Monday

结果

Weekday.Monday
1
Weekday.Monday
Monday
Weekday.Monday
1

二、枚举转字典

这里主要说的是,有些枚举的内容需要双向使用。


from enum import Enum, unique


# 继承枚举类,unique确保唯一的枚举值
@unique
class MissionEnum(Enum):
    """卫星代码"""
    BC1 = '66'
    BC2 = '77'
    BC3 = '88'

    @classmethod
    def dict_n_v(cls):
        return {m.name: m.value for m in cls}

    @classmethod
    def dict_v_n(cls):
        return {m.value: m.name for m in cls}


if __name__ == '__main__':
    print(MissionEnum.dict_n_v())
    print(MissionEnum.dict_v_n())
    print(MissionEnum.dict_n_v().get('BC1'))

三、枚举的应用

Python 枚举是一种用于定义固定值的数据类型,它可以使代码更加可读、可维护和可扩展。下面是一些 Python 枚举的常见应用场景:

状态机管理:状态机是一种有限状态自动机,用于描述系统的行为,例如网络协议、操作系统等。Python 枚举可以用来管理状态机中的状态和事件。

API 接口参数:API 接口通常需要指定一些固定值的参数,例如 HTTP 请求方法、文件访问模式等等。Python 枚举可以用来定义这些参数,提高代码的可读性和可维护性。

数据库字段类型:数据库表中的字段通常需要指定数据类型,例如整数、字符串、日期等等。Python 枚举可以用来定义这些数据类型,避免硬编码,并提高代码的可读性和可维护性。

程序配置管理:程序配置通常需要指定一些固定值,例如日志级别、调试模式、邮件服务器等等。Python 枚举可以用来定义这些配置项,提高代码的可读性和可维护性。

单元测试:在单元测试中,我们常常需要使用一些固定值来测试代码的正确性。Python 枚举可以用来定义这些测试数据,提高测试代码的可读性和可维护性。

总之,Python 枚举是一种非常实用的数据类型,可以使代码更加清晰、易读和易维护。它可以用来管理状态机、API 接口参数、数据库字段类型、程序配置和单元测试等等。

四、Django的model选项

1.model文件中的应用

from django.db import models

class OrderType(models.TextChoices):
    """订单类型"""
    ACCOUNT = 0, _('账户变动')
    ORDER = 1, _('存档订单')
    MISSION = 2, _('编程订单')

class Order(models.Model):
    otype = models.CharField(verbose_name='订单类型', max_length=1, choices=OrderType.choices,
                             default=OrderType.ORDER)  # 1: 存档订单;2:编程订单

2.views文件的使用

	order = Order(
		user_id=request.user.id,
		pic_id=pic.id,
		
		otype =OrderType.ORDER)

五、drf接口枚举

# response_result.py  
from enum import Enum  
from rest_framework.response import Response  
  
  
class ResponseMsg(Enum):
    SUCCESS = 'success'  
    BAD_REQUEST = 'bad request'  
    UNAUTHORIZED = 'unauthorized'  
    FORBIDDEN = 'forbidden'  
    NOT_FOUND = 'not found'  
    SERVER_ERROR = 'server error'  
  
  
class ResponseCode(Enum):  
    SUCCESS = 200  
    BAD_REQUEST = 400  
    UNAUTHORIZED = 401  
    FORBIDDEN = 403  
    NOT_FOUND = 404  
    SERVER_ERROR = 500  
  
  
class ResponseResult:  
    """  
    使用了DRF自带的Response类来封装返回结果。Response类在默认情况下会将数据序列化成JSON格式并返回,  
    可以自动设置HTTP响应头和状态码等信息,方便管理。在ResponseResult类中,我们加入了to_response方  
    法,将当前的ResponseResult实例转换成Response实例返回给DRF框架。此外,我们还对__getitem__和  
    __setitem__方法进行了重载,方便使用。  
    """  
    def __init__(self, code=ResponseCode.SUCCESS, data=None, msg=ResponseMsg.SUCCESS):  
        self.code = code.value  
        self.data = data  
        self.msg = msg  
  
    def __getitem__(self, key):  
        return getattr(self, key)  
  
    def __setitem__(self, key, value):  
        setattr(self, key, value)  
  
    def to_response(self):  
        return Response(data=self.__dict__)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我辈李想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值