【Python】枚举的使用

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


文章目录

  • 前言
  • 一、枚举示例
  • 二、枚举转字典
  • 三、枚举的应用
  • 四、drf接口枚举


前言

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


一、枚举示例

在 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 = 'TY-38'
    BC2 = 'TY-39'
    BC3 = 'TY-40'

    @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 接口参数、数据库字段类型、程序配置和单元测试等等。

四、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__)

你可能感兴趣的:(Django开始入门,python,开发语言)