枚举是与多个唯一常量值绑定的一组符号(即成员)。枚举中的成员可以进行身份比较,并且枚举自身也可迭代。
枚举成员名称建议使用大写字母
# 示例
from enum import Enum,unique, IntEnum(支持成员比较)
@unique # unique装饰器确保属性名和值唯一
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
# YELLOW = 2 会报错
// 不以类形式构造枚举
BugStatus = enum.Enum(
value='BugStatus',
names=[
('new', 3)
('old', 2)
('won_fix', 1)
],
)
for status in BugStatus:
print("{0}:{1}".format(status.name, status.value))
// 非整数成员值,元组
import enum
class BugStatus(enum.Enum):
new = (7, ['incomplete', 'invalid', 'won_fix', 'in_progress'])
incomplete = (6, ['new', 'wond_fix'])
invalid = (5, ['new'])
wont_fix = (4, ['new'])
in_progress = (3, ['new', 'fix_committed'])
fix_committed = (2, ['in_progress', 'fix_released'])
fix_released = (1, ['new'])
def __init__(self, num: int, transitions: list) -> None:
self.num = num
self.transitions = transitions
def can_transition(self, new_state: object):
print(new_state.name)
print(self.transitions)
return new_state.name in self.transitions
# 如果成员的值是一个元组,那么成员会被作为单个参数被传递到__init__()
print('Name', BugStatus.in_progress)
print('Value', BugStatus.in_progress.value) # (3, ['new', 'fix_committed'])
print('Custom attribute:', BugStatus.in_progress.transitions) # ['new', 'fix_committed']
print('Using attribute:', BugStatus.in_progress.can_transition(BugStatus.new)) #True
# 使用字典
import enum
class BugStatus(enum.Enum):
new = {
'num': 7,
'transitions': [
'incomplete',
'invalid',
'wont_fix',
'in_progress',
],
}
incomplete = {'num': 6, 'transitions': ['new']}
# 复杂成员的值会被作为唯一参数传递__init__()
def __init__(self, vals: dict) -> None:
self.num = vals['num']
self.transitions = vals['transitions']
def can_transition(self, new_state: object):
return new_state.name in self.transitions
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人