C#的Python等价物枚举.HasFlag

2024-09-29 00:20:33 发布

您现在位置:Python中文网/ 问答频道 /正文

比如说python

StateA = 1
StateB = 2
StateC = StateA | StateB

...
instance.state = StateA

在C中,Enum中有一个HasFlag函数,它告诉我一个对象的标志是StateC的一部分

python中是否有一个等效的版本?在

现在我只能(以比特方式)思考这个问题,甚至不确定它是否有效:

^{pr2}$

Tags: 对象instance函数版本标志方式enumstate
3条回答

测试标志:

value & flag == flag

添加标志:

^{pr2}$

清除标志:

value &= ~flag

python3.4有一个^{} data type,它has been backported。在

from enum import Enum

class States(Enum):
    StateA = 1
    StateB = 2
    StateC = StateA | StateB
    def has_flag(self, flag):
        return self.value & flag.value

if States.StateC.has_flag(States.StateA):
    print("yup, it's there!")

Python3.6^{} data type,它也存在于the ^{}1 library

^{pr2}$

1公开:我是Python stdlib ^{}^{} backport和{a7}库的作者。在

HasFlag基本上是位操作。在

>>> a = 0b01
>>> b = 0b10
>>> "{0:b}".format(a | b,)
'11'
>>> def has_flag(v, flag): return v & flag == flag
...
>>> has_flag(0b111, a)
True
>>> has_flag(0b111, a|b)
True
>>> has_flag(0b1, a|b)
False

相关问题 更多 >