python的枚举类型

Python 中的枚举类型通过标准库 enum 模块实现,自 Python 3.4 版本引入。枚举是一组绑定到唯一值的符号名称(成员),主要用于定义一组固定的常量,以提升代码的可读性、可维护性和类型安全性。

以下是关于 Python 枚举类型的详细指南:

1. 基础用法
创建枚举最简单的方法是定义一个继承自 enum.Enum 的类。

from enum import Enum

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

 

‌访问枚举成员:‌

  • ‌通过名称访问‌:Color.RED
  • ‌通过值访问‌:Color(1) 返回 <Color.RED: 1>
  • ‌通过字符串名称访问‌: Color['RED'] 返回 <Color.RED: 1>

‌获取属性和信息:‌
每个枚举成员都有 namevalue 属性。

member = Color.RED
print(member.name) # 输出: 'RED'
print(member.value) # 输出: 1
print(type(member)) # 输出: <enum 'Color'>

 

2. 为什么使用枚举?

相比于使用“魔法数字”或硬编码字符串,枚举具有以下优势:

  • ‌类型安全‌:枚举成员是唯一的实例,可以进行严格的类型检查 (isinstance)。
  • ‌防止拼写错误‌:IDE 可以提供自动补全,避免字符串拼写错误导致的逻辑 bug。
  • ‌可读性强‌:Color.RED 比数字 1 或字符串 'red' 语义更清晰。
  • ‌不可变性‌:枚举成员一旦定义,其值不可修改,也不能动态添加新成员。

3. 高级特性与变体

3.1 自动赋值 (auto)

如果不需要关心具体的整数值,可以使用 auto() 让 Python 自动分配值(默认从 1 开始递增)。

 

from enum import Enum, auto

class Status(Enum):
PENDING = auto()
RUNNING = auto()
DONE = auto()

 

3.2 确保值唯一 (@unique)

默认情况下,不同的枚举成员可以拥有相同的值(后者成为前者的别名)。如果需要确保每个值都是唯一的,可以使用 @unique 装饰器。如果有重复值,程序在加载时会抛出 ValueError

from enum import Enum, unique

@unique
class Shape(Enum):
SQUARE = 1
CIRCLE = 2
# TRIANGLE = 1 # 这会报错,因为值 1 已被 SQUARE 使用

 

3.3 IntEnum 和 StrEnum

  • ‌IntEnum‌:枚举成员同时也是 int 的子类,可以直接与整数进行比较和运算。适用于需要兼容旧代码或进行数值比较的场景。
  • ‌StrEnum‌ (Python 3.11+):枚举成员同时也是 str 的子类,支持字符串操作。

from enum import IntEnum

class Priority(IntEnum):
LOW = 1
HIGH = 2

print(Priority.HIGH > Priority.LOW) # True
print(Priority.HIGH == 2) # True

 

3.4 Flag 和 IntFlag

用于处理位标志(Bitwise Flags),允许将多个成员组合在一起。成员的值通常应为 2 的幂(1, 2, 4, 8...)。

 

from enum import Flag

class Permission(Flag):
READ = 1
WRITE = 2
EXECUTE = 4

# 组合权限
user_perms = Permission.READ | Permission.WRITE
print(Permission.READ in user_perms) # True
print(user_perms) # <Permission.READ|WRITE: 3>

 

4. 常用操作

  • ‌迭代‌:可以遍历枚举中的所有成员。

for color in Color:
print(color)

 

 
 
 
 

 

posted on 2026-05-20 11:28  漫思  阅读(35)  评论(0)    收藏  举报

导航