← retour aux snippets

enum.Flag: combiner des bits facilement

Créer des flags bit-à-bit avec opérations logiques.

python enum #enum#flag#bitmask

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.