我在将整数解释为枚举标志中问了这个问题,但没有像我应该的那样清楚地说明挑战。我正在寻找如何获取纯整数,而不是基于 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"]
您可以迭代可能的标志并评估是否设置了相应的位。使用枚举值进行检查。然后你可以访问枚举对象的
.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']
您可以使用值
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']