python学习笔记 | 11.5、面向对象高级编程-使用枚举类

一、为什么要用枚举类?(思路)

平时我们写固定不变的选项(性别、月份、星期、订单状态),

以前会这样写:

复制代码
MALE = 0
FEMALE = 1

但这种写法不安全、不规范、容易出错

  • 只是数字 / 字符串,没有类型限制
  • 可以被随便修改
  • 别人不知道这组值是干嘛的

枚举类 = 把固定常量打包成一个类,安全、规范、好维护


二、枚举类是什么?

一句话:

枚举类就是专门用来放 "固定不变的选项" 的类。

比如:性别(男 / 女)、星期(一到日)、月份(1-12)。


三、2 种创建枚举类的方法

方法 1:快速创建(自动赋值)

实例

复制代码
from enum import Enum

# 格式:Enum(枚举名, (成员1, 成员2...))
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Dec'))

解析

  • 自动从 1 开始编号:Jan=1,Feb=2,Mar=3...
  • 不用自己写数字
  • 适合简单场景

怎么用

复制代码
print(Month.Jan)       # 输出:Month.Jan
print(Month.Jan.value) # 输出:1

方法 2:自定义枚举(最常用、最规范)

实例

复制代码
from enum import Enum, unique

@unique   # 保证值不重复
class Weekday(Enum):
    Sun = 0
    Mon = 1
    Tue = 2
    Wed = 3

解析

  • @unique:检查重复值,有重复直接报错
  • 可以自己指定每个成员的值
  • 工作中最常用

四、枚举类 5 种常用用法(必记)

复制代码
# 1. 直接用
Weekday.Mon

# 2. 拿值
Weekday.Mon.value

# 3. 用字符串名字拿
Weekday['Mon']

# 4. 用值反查
Weekday(1)

# 5. 遍历所有成员
for name, member in Weekday.__members__.items():
    print(name, member)

五、枚举类优点

  1. 只能用规定好的选项,不能乱填
  2. 代码更清晰
  3. 不会写错字符串、数字
  4. 不能被修改,安全

六、官方练习题(原题 + 解析 + 答案)

题目要求

把 Student 的 gender 改成枚举类型,避免用字符串出错。

原题代码

复制代码
##代码 ✅️
# 把 Student 的 gender 改成枚举类型,避免用字符串出错。

from enum import Enum  #枚举
class Gender(Enum):  #必须写在Student前  因为Student类里用到了gender
    male = 0
    female = 1

class Student(object):
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

s1=Student('小明',12,Gender.female)

if s1.gender == Gender.female:
    print('测试成功')
elif s1.gender == Gender.male:
    print('测试失败')

##代码 豆包
from enum import Enum, unique

class Gender(Enum):
    Male = 0
    Female = 1

class Student(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

# 测试:
bart = Student('Bart', Gender.Male)
if bart.gender == Gender.Male:
    print('测试通过!')
else:
    print('测试失败!')

解析

  • 定义 Gender 枚举:男 = 0,女 = 1
  • Student 类接收的 gender 必须是枚举值
  • 不能传字符串,不会出错

运行结果

复制代码
测试通过!

七、练习题

练习 1:创建季节枚举

要求:

创建 Season 枚举,包含 Spring、Summer、Autumn、Winter

值分别为 1、2、3、4

打印 Summer 的值

答案

复制代码
## 练习 1:创建季节枚举
# 要求:
# 创建 Season 枚举,包含 Spring、Summer、Autumn、Winter
# 值分别为 1、2、3、4
# 打印 Summer 的值
from enum import Enum, unique
@unique
# class Season(enum):   ##❌️  小写不对
class Season(Enum):
    Spring = 1
    Summer = 2
    Autumn = 3
    Winter = 4


print(Season.Summer.value)

##代码 豆包
from enum import Enum, unique

@unique
class Season(Enum):
    Spring = 1
    Summer = 2
    Autumn = 3
    Winter = 4

print(Season.Summer.value)  # 输出 2

练习 2:判断枚举是否相等

创建一个枚举:

复制代码
Red = 1
Green = 2
Blue = 3

判断 Color.Red 是否等于 Color(1)

答案

复制代码
## 练习 2:判断枚举是否相等
# 创建一个枚举:
# Red = 1
# Green = 2
# Blue = 3
# 判断 `Color.Red` 是否等于 `Color(1)`

from enum import Enum
class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

if Color.RED == Color(1):
    print('测试成功')
else:
    print('测试失败')

##  class = 造东西的模具
##  if = 马上执行的判断逻辑

##代码 豆包
from enum import Enum

class Color(Enum):
    Red = 1
    Green = 2
    Blue = 3

print(Color.Red == Color(1))  # 输出 True

八、小结

  1. 枚举类 = 管理固定选项(性别、星期、状态)
  2. 比普通变量更安全、更规范
  3. from enum import Enum, unique
  4. 最常用:自定义枚举 + @unique
  5. 获取值:成员.value
  6. 按值反查:类名(值)
相关推荐
兵慌码乱7 小时前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot8 小时前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海13 小时前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱16 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽20 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码21 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱1 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵1 天前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663672 天前
使用 Python 从零创建 Word 文档
python