【Python面线对象进阶⑤】——枚举类enum

简介: 枚举类,在企业开发中用的比较多当我们需要定义常量时,一个办法是用大写的变量通过整数来定义。

枚举类Enum

py面向对象进阶.png

枚举类,在企业开发中用的比较多

当我们需要定义常量时,一个办法是用大写的变量通过整数来定义,例如月份:

# 当项目中需要使用12个月份时
JAN = 1
FEB = 2
...
NOV = 11
DEC = 12

但是这样的定义的类型是 int ,并且仍然是变量,并且在运算中,无法时时创建对应的值,当然这种指代是以更好的方式去使用变量数值。

这里存在更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了 Enum 类来实现这个功能。

优化如下

# -*- coding: utf-8 -*-
# @author: Flyme awei 
# @email : 1071505897@qq.com
# @Time  : 2022/7/3 12:21


from enum import Enum

# 枚举中,一个名字对应一个值
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Otc', 'Nov', 'Dec'))

这样我们就获得了 Month 类型的枚举类,可以直接使用 Month.Jan 来引用一个常量,或者枚举它的所有成员通过for循环进行取值,

Month.__members__是Month的内置变量,可以打印成员标签,

如果在这个方法调用上.items()函数所有成员都打印出来,数据类型为元组

for name, member in Month.__members__.items():

    print(f'{name} => {member} , {member.value}')+
    

在这里插入图片描述

定义一个颜色常量枚举
# -*- coding: utf-8 -*-
# @author: Flyme awei 
# @email : 1071505897@qq.com
# @Time  : 2022/7/3 12:21

from enum import Enum

# 枚举中 一个一个名字对应一个值
Month = Enum('抬头-Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

print(Month.__members__)  # 枚举中的值自动从1开始,不会重复

# 得到三月份的值
print(Month['Mar'].value)  # 3

# 根据(2)来获得月份名字
print(Month(2).name)  # Feb


# 定义一个颜色的常量枚举
class Color(Enum):  # 第二种:自定义一个枚举类
    red = 100
    green = 200
    blue = 300
    yellow = 200  # 不允许key相同或者value,如果value重复,根据value取name只能取第一个


print(Color(200))  # Color.green
不允许key相同或者value相同,如果value重复,根据value取name只能取第一个

在这里插入图片描述

总结

1.枚举类不能用来实例化对象

2.访问枚举类中的某一项,直接使用类名访问加上要访问的项即可,比如 color.RED

3.枚举类里面定义的 Key = Value,在类外部不能修改 Value 值

4.枚举项可以用来比较,使用 ==,或者 is

5.枚举类中的 Key 不能相同,Value 可以相同,但是 Value 相同的各项 Key 都会当做别名

6.枚举类可以用 for 进行遍历,members.items() 可以遍历出含有别名的类

7.如果要枚举类中的 key 也不能相同,需要导入 unique 对枚举类进行装饰

相关文章
|
1月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
20 1
|
1月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
24 2
|
1月前
|
存储 缓存 Java
深度解密 Python 虚拟机的执行环境:栈帧对象
深度解密 Python 虚拟机的执行环境:栈帧对象
61 13
|
1月前
|
设计模式 开发者 Python
Python类里引用其他类
Python类里引用其他类
|
1月前
|
设计模式 开发者 Python
Python 类中引用其他类的实现详解
Python 类中引用其他类的实现详解
38 1
|
1月前
|
JSON 缓存 API
在 Python 中使用公共类处理接口请求的响应结果
在 Python 中使用公共类处理接口请求的响应结果
30 1
|
1月前
|
索引 Python
Python 对象的行为是怎么区分的?
Python 对象的行为是怎么区分的?
26 3
|
1月前
|
存储 缓存 算法
详解 PyTypeObject,Python 类型对象的载体
详解 PyTypeObject,Python 类型对象的载体
32 3
|
1月前
|
Python
深入解析 Python 中的对象创建与初始化:__new__ 与 __init__ 方法
深入解析 Python 中的对象创建与初始化:__new__ 与 __init__ 方法
19 1
|
1月前
|
缓存 Java 程序员
一个 Python 对象会在何时被销毁?
一个 Python 对象会在何时被销毁?
38 2
下一篇
无影云桌面