0Pricing
Python Academy · 课时

IntEnum 与 Flag

使用整数枚举和标志枚举

IntEnum 与 Flag 是 CoddyKit 上的免费 Python Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

超越普通枚举

enum 模块提供了专用的基类。IntEnum 成员的行为类似整数,而标志枚举成员可以使用按位运算符进行组合。当普通 Enum 的限制过多时,它们可以满足相应需求。

普通 Enum 不是整数

普通 Enum 成员不能与其整数值互换使用。将它与数字进行比较会返回 False。

from enum import Enum

class Level(Enum):
    LOW = 1
    HIGH = 2

print(Level.LOW == 1)

IntEnum 按整数进行比较

IntEnum 成员就是整数,因此它与对应的数值相等,并支持排序。

from enum import IntEnum

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

print(Level.LOW == 1)
print(Level.LOW < Level.HIGH)

算术运算中的 IntEnum

由于成员是真正的整数,您可以在数学运算和索引中使用它们。当某个值确实需要与数值代码互操作时,请使用这种方式。

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

print(Priority.HIGH + 1)
print(Priority.MEDIUM * 2)

对 IntEnum 成员排序

由于 IntEnum 支持排序,成员列表无需额外的键函数即可按值排序。

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

for p in sorted([Priority.HIGH, Priority.LOW, Priority.MEDIUM]):
    print(p.name)

使用标志枚举表示可组合选项

Flag 枚举用于表示需要组合的值。请分配 2 的幂,使每个成员各占据一个独立的位。

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

print(Permission.READ)
print(Permission.READ.value)

使用 | 组合标志

使用按位或运算符 | 将多个标志组合成一个复合值。

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(access)

使用 in 测试成员关系

使用 in 运算符检查某个标志是否已设置,该运算符会为您执行按位测试。

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(Permission.READ in access)
print(Permission.EXECUTE in access)

交集与移除

使用 &(AND)组合标志以查找共同的位,并使用 & 与补码 ~ 运算来移除标志。

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
still = access & ~Permission.WRITE
print(still)

使用 IntFlag 表示整数标志

IntFlag 结合了这两种特性:标志可以组合,同时又表现得像普通整数。当您需要与 C API 交互或处理以数字存储的位掩码时,它非常有用。

from enum import IntFlag, auto

class Mode(IntFlag):
    R = 4
    W = 2
    X = 1

m = Mode.R | Mode.W
print(int(m))

遍历组合标志

遍历组合的 Flag 值时,会生成其中包含的每个独立标志,这对于列出活动选项非常方便。

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.EXECUTE
for p in access:
    print(p.name)

快速检查

为什么要选择 Flag 枚举,而不是普通的 Enum?

回顾

您学会了整数枚举和标志枚举。

  • IntEnum 成员的行为类似整数,并支持排序和算术运算。
  • Flag 成员可以使用 |、& 和 ~ 进行组合,并使用 in 进行测试。
  • IntFlag 混合了这两种行为。
  • 为标志值使用 2 的幂。

常见问题解答

「IntEnum 与 Flag」课时是免费的吗?

是的 — 「IntEnum 与 Flag」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「IntEnum 与 Flag」这节课中我会学到什么?

使用整数枚举和标志枚举 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「IntEnum 与 Flag」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 枚举类
  2. IntEnum 与 Flag
  3. NamedTuple 基础
  4. typing.NamedTuple
← 返回 Python Academy