objectif
Créer des flags bit-à-bit avec opérations logiques.
code minimal
from enum import Flag, auto
class Perm(Flag):
READ = auto(); WRITE = auto(); EXEC = auto()
both = Perm.READ | Perm.WRITE
print((both & Perm.READ) == Perm.READ) # attendu: True
utilisation
from enum import Flag, auto
class Mode(Flag):
A = auto(); B = auto(); C = auto()
m = Mode.A | Mode.C
print(Mode.A in m and Mode.B not in m)
variante(s) utile(s)
from enum import IntFlag
class F(IntFlag):
X = 1; Y = 2
print(int(F.X | F.Y) == 3)
notes
- IntFlag s’intègre bien avec des APIs qui attendent des entiers.
- Évitez les collisions en utilisant auto() ou des puissances de 2.