>>> Perm.X | 8
<Perm.8|X: 9>
+:class:`IntFlag` members can also be iterated over::
+
+ >>> list(RW)
+ [<Perm.R: 4>, <Perm.W: 2>]
+
+.. versionadded:: 3.10
+
Flag
^^^^
>>> bool(Color.BLACK)
False
+:class:`Flag` members can also be iterated over::
+
+ >>> purple = Color.RED | Color.BLUE
+ >>> list(purple)
+ [<Color.BLUE: 2>, <Color.RED: 1>]
+
+.. versionadded:: 3.10
+
.. note::
For the majority of new code, :class:`Enum` and :class:`Flag` are strongly
type(other).__qualname__, self.__class__.__qualname__))
return other._value_ & self._value_ == other._value_
+ def __iter__(self):
+ members, extra_flags = _decompose(self.__class__, self.value)
+ return (m for m in members if m._value_ != 0)
+
def __repr__(self):
cls = self.__class__
if self._name_ is not None:
self.assertFalse(W in RX)
self.assertFalse(X in RW)
+ def test_member_iter(self):
+ Color = self.Color
+ self.assertEqual(list(Color.PURPLE), [Color.BLUE, Color.RED])
+ self.assertEqual(list(Color.BLUE), [Color.BLUE])
+ self.assertEqual(list(Color.GREEN), [Color.GREEN])
+
def test_auto_number(self):
class Color(Flag):
red = auto()
with self.assertRaises(TypeError):
self.assertFalse('test' in RW)
+ def test_member_iter(self):
+ Color = self.Color
+ self.assertEqual(list(Color.PURPLE), [Color.BLUE, Color.RED])
+ self.assertEqual(list(Color.BLUE), [Color.BLUE])
+ self.assertEqual(list(Color.GREEN), [Color.GREEN])
+
def test_bool(self):
Perm = self.Perm
for f in Perm: