pyhon模块之enum模块

本文详细介绍了Python中的枚举类型,包括基本的Enum、基于整数的IntEnum和StrEnum,以及Flag用于位标志的枚举。此外,还讲解了auto自增长、property装饰器、非成员和成员保护等方法。
摘要由CSDN通过智能技术生成
一、简介

枚举是一种数据类型,在编程中用于表示一组相关的常量。枚举中的每个常量都有一个名称和一个对应的值,可以用于增强代码的可读性和可维护性。在Python中,枚举是由enum模块提供的

二、导入enum模块
import enum
三、常见枚举类

1.enum.Enum:基本的枚举类。

import enum

color1 = enum.Enum('Color', 'RED GREEN BLUE', start=2)  # 声明color枚举,值从2开始递增
print('===================================')
print(color1.RED.value, color1.GREEN.value)

color2 = enum.Enum('Color', [('RED', 'RED'), ('GREEN', 'GREEN'), ('BLUE', 'BLUE')])  # 声明color枚举,并设置值
print('===================================')
print(color2.RED.value, color2.GREEN.value)


class Color3(enum.Enum):  # 通过class创建枚举
    RED = 'RED'
    GREEN = 1

print('===================================')
print(list(Color3))  # 枚举转数组
print(Color3.__members__)  # 返回成员对象
print(Color3.RED.value, Color3.GREEN.value)  # 获取枚举值

2.enum.IntEnum:基于整数的枚举类,与enum.Enum不同的是字符串类型的值也会转为int,无法转int时会报错

import enum


class Color3(enum.IntEnum):  # 通过class创建枚举
    # RED = 'RED' #该代码会报错,因为RED无法转int
    RED = '0'
    GREEN = 1


print(type(Color3.RED.value))  # 虽然RED赋值的是字符串0,但是获取到的类似是int

3.enum.StrEnum:基于字符串的枚举类,与enum.IntEnum不同是不会自动转字符串

import enum


class Color3(enum.StrEnum):  # 通过class创建枚举
    # RED = 0 #该代码会报错,因为RED无法转int
    RED = '0'
    GREEN = '1'


print(type(Color3.GREEN.value)) 

4.enum.Flag:用于定义位标志的枚举类,允许使用位运算符对多个枚举成员进行组合

import enum


class Permissions(enum.IntEnum):
    READ = '1'
    WRITE = 2
    EXECUTE = 3


# 组合多个权限
user_permissions = Permissions.READ | Permissions.WRITE
print(user_permissions)  # 输出: Permissions.READ|WRITE

# 检查权限
if user_permissions & Permissions.READ:
    print("用户有读取权限")

if user_permissions & Permissions.WRITE:
    print("用户有写入权限")

if user_permissions & Permissions.EXECUTE:
    print("用户有执行权限")
else:
    print("用户没有执行权限")

5.enum.IntFlag:基于整数的位标志枚举类。

from enum import IntFlag


class Permissions(IntFlag):
    # READ = 'READ' #此代码会报错
    READ = '1'
    WRITE = 2
    EXECUTE = 4


# 组合标志成员
permissions = Permissions.READ | Permissions.WRITE
print(permissions)

# 检查标志是否存在
print(permissions & Permissions.READ)  # 输出: 1
print(permissions & Permissions.EXECUTE)  # 输出: 0

# 检查多个标志是否同时存在
print(permissions & (Permissions.READ | Permissions.WRITE))  # 输出: 3
print(permissions & (Permissions.READ | Permissions.EXECUTE))  # 输出: 1
四、常见方法、装饰器

1.enum.auto(value):返回一个自动的枚举常量,自动增加

import enum


class Color(enum.Enum):
    RED = enum.auto(2)  # 从2开始递增,默认1
    GREEN = enum.auto()
    YELLOW = enum.auto()


print(Color.RED.value, Color.GREEN.value, Color.YELLOW.value)  # 2、3、4

2.enum.property:装饰器,用于定义枚举成员的属性

import enum


class Color(enum.Enum):
    RED = enum.auto()
    GREEN = enum.auto()
    YELLOW = enum.auto()

    @enum.property
    def value(self):
        if self == Color.RED:
            return 'RED'
        elif self == Color.GREEN:
            return 'GREEN'
        elif self == Color.YELLOW:
            return 'YELLOW'


print(Color.RED.value, Color.GREEN.value, Color.YELLOW.value)  # RED、GREEN、YELLOW

3.enum.nonmember(value):创建枚举类时保护某个值不成为枚举成员

import enum


class Color(enum.Enum):
    RED = 1
    GREEN = enum.nonmember('str')
    YELLOW = 3


print(Color.RED.value)  # 1
print(Color.YELLOW.value)  # 3
# print(Color.GREEN.value)  #报错
print(Color.GREEN)  # str
print(Color.__members__)  # 成员中无GREEN

4.enum.member(value):创建枚举类时强制将某个值作为枚举成员

import enum


class Color(enum.Enum):
    RED = 1
    GREEN = enum.member(2)
    YELLOW = 3


print(Color.RED.value)  # 1
print(Color.YELLOW.value)  # 3
print(Color.GREEN)  # 2

5.enum.unique:装饰器,确保枚举类的成员值是唯一的

from enum import Enum, unique


@unique
class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3
    # BLACK = 3  # 报错,3已存在


# 访问枚举成员的值
print(Color.RED.value)  # 1
print(Color.GREEN.value)  # 2
print(Color.BLUE.value)  # 3

6.enum.global_str(member):获取成员name

from enum import Enum, global_str


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


# 访问枚举成员的值
print(global_str(Color.RED))  # RED
print(Color.GREEN.value)  # 2
print(Color.BLUE.value)  # 3

7.enum.global_enum:装饰器,使其引用所属模块而不是所属类,并将所有成员导出

from enum import Enum, global_enum


# 定义枚举类
@global_enum
class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3


print(RED)  # 显示RED
print(Color.RED)  # 显示RED

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值