一对一视频直播源码,利用枚举提升代码的可读性

一对一视频直播源码,利用枚举提升代码的可读性

枚举(Enum)是Python自带的特性,用来定义有多个有限值时是绝佳的应用场景。先定义了状态枚举类

复制代码
import enum
class StudyStatusEnum(enum.Enum):
    no_start = 0  # 未开始

    learning = 1  # 学习中

    finish = 2  # 已学完

    expired = 3 # 过期
复制代码

 

然后将前面的逻辑修改成:

复制代码
if status==StudyStatusEnum.no_start:
    pass



elif status==StudyStatusEnum.leanring:
    pass



if  finished:
    status = StudyStatusEnum.finish
复制代码

 

如果一对一视频直播源码中用的ORM框架是SQLAlchemy,那么要同时修改status属性的定义

class Study(Models):
    # status = db.Column(db.SmallInteger, default=0, comment="学习状态 0 未开始 1 学习中 2 已完成")

    status = db.Column(Enum(StudyStatusEnum), default=StudyStatusEnum.no_start)

 

这样修改其实有个问题是,枚举类型在一对一视频直播源码数据库中对应的是字符串类型,而实际上我们希望存一个int类型,对应枚举的value值,而不是枚举的name属性。

所以,这时候我们可以基于SQLAlchemy提供的TypeDecorator来自定义Enum类型叫做IntEnum。

复制代码
from sqlalchemy import TypeDecorator, Integer
class IntEnum(TypeDecorator):
    """

    整数枚举类型 主要用于状态等场景



    """

    impl = Integer


    def __init__(self, enumtype, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._enumtype = enumtype


    def process_bind_param(self, value, dialect):
        # 入库时调用此方法,返回的是枚举的value

        return value.value


    def process_result_value(self, value, dialect):
        # 从数据库加载到内存时的值,返回的一个枚举实例

        return self._enumtype(value)
复制代码

 

我们只需要重写这三个方法,即可已实现一个可以保存int类型的枚举。

status = db.Column(IntEnum(StudyStatusEnum), default=StudyStatusEnum.no_start)

 

以上就是一对一视频直播源码,利用枚举提升代码的可读性, 更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2023-06-29 直播平台源代码,TextView文本折叠查看显示更多效果
2023-06-29 直播平台制作,使用动画设置ProgressBar进度
2023-06-29 直播app开发搭建,搜索框+含搜索历史记录
2022-06-29 直播软件开发,Android自定义简单的音频波谱view
2022-06-29 直播平台开发,进入可视区域执行动画、动效、添加样式类名
2022-06-29 短视频平台搭建,淡入淡出 支持左滑右滑轮播图
点击右上角即可分享
微信分享提示