将组合的 IntFlag 分解为其单独的标志

M. *_*ley 5 python enums

如何从Python 中的组合IntFlag值中获取单个标志?

import enum

class Example(enum.IntFlag):
    A = 0b0001
    B = 0b0010
    C = 0b0100

combined = Example.A | Example.B

# How can I get the individual flags back?
flags = [flag for flag in combined]
Run Code Online (Sandbox Code Playgroud)

M. *_*ley 8

列表理解可以工作:

flags = [flag for flag in Example if flag in combined]
Run Code Online (Sandbox Code Playgroud)

如果您的标志值中的位重叠,则上述内容将为您提供在组合值中找到的所有可能的标志。

我没有在 Python 3.7 的标准库中看到一个公共 API 来做到这一点。该enum模块确实有一个私有_decompose函数,它是上述更复杂的版本,并用于 inIntFlag__repr__方法。