惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
H
Help Net Security
云风的 BLOG
云风的 BLOG
Apple Machine Learning Research
Apple Machine Learning Research
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
D
Docker
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
博客园 - Franky
B
Blog RSS Feed
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
量子位
V
Visual Studio Blog
Y
Y Combinator Blog
小众软件
小众软件
N
Netflix TechBlog - Medium
博客园 - 三生石上(FineUI控件)
Microsoft Security Blog
Microsoft Security Blog
雷峰网
雷峰网

博客园 - 漫思

python使用.env构建开发和生产环境 python项目的构建 nodejs构建CICD时的思考  成为 AI 智能体工程师的 10 个步骤 es6的 yield python 中的 yield 笔记本的A壳 thinkpad 更换 reduce() in Python python的字段赋值和取值的操作 python的语法类似于lodash分组展开,合并分组操作 SelectMany C# lodash 数组的常用做法 lodash里面的常用方法 技术的边界 Reduce 和 Transduce 的含义 尤雨溪创办的 VoidZero 官宣加入 Cloudflare,前端 Vite 等保持开源 Ramda 函数库参考教程 ramda es 数组的方法 flatmap map object.entity的教程 Map与FlatMap:在数据处理中的区别与联系 flat、flatmap与map的用法区别1 flat、flatmap与map的用法区别 AI不是从天而降,它经历了七十年三起三落:读懂AI的第三课 Agent 17 种架构模式 分析 & 思考 只有踩过坑才懂:前端生成唯一 ID,别用 Date.now ()了!试试它crypto.randomUUID() FastAPI python并发 代码是 AI 写的,生产事故谁背锅? AI Agent 走出 Demo 幻觉的唯一解药:Harness Engineering
python的enum通过int进行初始化
漫思 · 2026-05-20 · via 博客园 - 漫思

在 Python 中,enum 模块提供了多种方式通过整数(int)来初始化和使用枚举。主要涉及以下几种场景:

1. 基础 Enum 通过整数值查找成员

对于标准的 Enum 类,你可以直接使用整数值作为参数来获取对应的枚举成员。这是最常用的“通过 int 初始化/获取”的方式。

from enum import Enum

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

# 通过整数值 1 获取枚举成员
member = Color(1)
print(member) # 输出: Color.RED
print(member.name) # 输出: 'RED'
print(member.value) # 输出: 1

注意‌:标准的 Enum 成员虽然拥有整数值,但它们‌不等于‌整数。

print(Color.RED == 1) # False
print(Color.RED is Color(1)) # True

2. 使用 IntEnum 使枚举行为像整数

如果你希望枚举成员可以直接与整数进行比较、运算,或者在需要整数的地方直接替代整数使用,应继承 IntEnumIntEnumint 的子类。

from enum import IntEnum

class Status(IntEnum):
OK = 200
NOT_FOUND = 404
ERROR = 500

# IntEnum 成员可以直接与整数比较
print(Status.OK == 200) # True
print(Status.OK > 100) # True

# 可以进行数学运算
print(Status.OK + 100) # 300

# 可以通过整数初始化
status = Status(200)
print(status) # Status.OK

3. 使用 auto() 自动分配整数值

如果不需要指定具体的整数值,可以使用 auto() 辅助类,它会自动为成员分配从 1 开始的递增整数。

from enum import Enum, auto

class Priority(Enum):
LOW = auto() # 1
MEDIUM = auto() # 2
HIGH = auto() # 3

print(Priority.LOW.value) # 1
print(Priority.HIGH.value) # 3

4. 自定义 __new__ 处理复杂整数初始化

如果需要为枚举成员添加额外的属性,同时保持基于整数的初始化逻辑,可以重写 __new__ 方法。这在 IntEnum 中尤为常见。

from enum import IntEnum

class Color(IntEnum):
RED = 1, "红色"
GREEN = 2, "绿色"
BLUE = 3, "蓝色"

def __new__(cls, value, label):
# 创建实例并设置值
obj = int.__new__(cls, value)
obj._value_ = value
obj.label = label
return obj

# 通过整数初始化
c = Color(1)
print(c) # Color.RED
print(c.label) # 红色
print(c == 1) # True (因为是 IntEnum)

总结

  • ‌仅用于常量定义‌:使用 Enum,通过 Color(1) 方式由整数获取成员。
  • ‌需要与整数互操作‌(如比较、运算):使用 IntEnum
  • ‌自动赋值‌:使用 auto()
  • ‌额外属性‌:结合 IntEnum__new__ 方法实现。

推荐使用 IntEnum 当且仅当你确实需要枚举成员表现得像整数时(例如 HTTP 状态码、权限位等),否则标准 Enum 能提供更好的类型安全性,防止枚举成员与无关整数意外相等。