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. 按值反查:类名(值)
相关推荐
包子BI大数据1 小时前
2.COZE-RAG知识库搭建
python·ai·aigc
muddjsv1 小时前
《算法导论》入门学习路径:从零基础到系统掌握
学习·算法
七夜zippoe1 小时前
DolphinDB自定义函数:UDF开发指南
开发语言·python·自定义函数·udf·dolphindb
ZC跨境爬虫1 小时前
SQL学习日志_Day2_深入SQL语法与数据库层级结构
数据库·sql·学习·oracle
weixin199701080161 小时前
[特殊字符] 电商库存扣减防超卖:分布式锁的三种实现(附Python源码)
开发语言·分布式·python
长和信泰光伏储能2 小时前
北京光伏方案解析:探索绿色能源新趋势
python·能源
码不停蹄的玄黓2 小时前
Java 应用 CPU 过高排查全流程
java·开发语言·python
许彰午2 小时前
11_Java集合框架概述
java·windows·python
好好风格2 小时前
微软这个 14 万星工具,把 PDF、PPT、Excel 都变成大模型爱读的 Markdown
人工智能·python·开源