Разложить объединенный IntFlag на отдельные флаги - PullRequest
2 голосов
/ 27 сентября 2019

Как я могу получить отдельные флаги из объединенного значения IntFlag в Python?

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]

1 Ответ

3 голосов
/ 27 сентября 2019

Может работать понимание списка:

flags = [flag for flag in Example if flag in combined]

Если биты в значениях вашего флага перекрываются, то приведенное выше даст вам все возможные флаги, найденные в объединенном значении.

Я не сделалне вижу публичного API для этого в стандартной библиотеке Python 3.7.Модуль enum имеет частную функцию _decompose, которая является более сложной версией вышеупомянутого и используется в методе IntFlag __repr__.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...