将整数解释为 Python 枚举标志

问题描述 投票:0回答:2

我在将整数解释为枚举标志中问了这个问题,但没有像我应该的那样清楚地说明挑战。我正在寻找如何获取纯整数,而不是基于 Flags 的类的实例,并根据类中的定义解释该整数。

假设我有一个像这样的 Flag 枚举:

From enum import Flag
class suspicion(Flag):
     TOT_PCNT_LOW = 1
     IND_PCNT_LOW = 2
     IND_SCORE_LOW = 4

假设我有一个整数,其位设置与定义一致,但只是一个整数。这不是嫌疑枚举的一个实例。

i == 3

如何获取与整数中的位相对应的标志名称列表?

例如:

print(some_method(i))   # prints ["IND_PCNT_LOW", "TOT_PCNT_LOW"]
python-3.x enums
2个回答
3
投票

您可以迭代可能的标志并评估是否设置了相应的位。使用枚举值进行检查。然后你可以访问枚举对象的

.name
属性来获取与值关联的名称

像这样:

from enum import Flag


class suspicion(Flag):
     TOT_PCNT_LOW = 1  # 001
     IND_PCNT_LOW = 2  # 010
     IND_SCORE_LOW = 4 # 100


i = 3 # 011


def flags_set(num):
    return [sus.name for sus in suspicion if num & sus.value]

print(flags_set(i))

打印:

['TOT_PCNT_LOW', 'IND_PCNT_LOW']

0
投票

您可以使用值

suspicion
实例化一个新的
i
对象。 python 将用
|
符号连接相应的名称:

>>> i = 3

>>> suspicion(i)
<suspicion.TOT_PCNT_LOW|IND_PCNT_LOW: 3>

>>> suspicion(i).name
'TOT_PCNT_LOW|IND_PCNT_LOW'

>>> suspicion(i).name.split('|')
['TOT_PCNT_LOW', 'IND_PCNT_LOW']
© www.soinside.com 2019 - 2024. All rights reserved.