Python enum.Flag Class

The enum.Flag class in Python’s enum module allows you to create enumerations for bit flags. This is particularly useful when you need to represent combinations of options or features using bitwise operations.

Table of Contents

  1. Introduction
  2. enum.Flag Class Syntax
  3. Examples
    • Basic Usage
    • Combining Flags
    • Checking for Flags
    • Iterating Over Flags
  4. Real-World Use Case
  5. Conclusion

Introduction

The enum.Flag class allows you to define enumerations for bit flags, which can be combined using bitwise operations (|, &, ^, ~). Each flag should have a value that is a power of 2, enabling unique combinations of flags using bitwise OR (|).

enum.Flag Class Syntax

Here is how you define an enumeration with the enum.Flag class:

from enum import Flag, auto

class EnumName(Flag):
    MEMBER1 = auto()
    MEMBER2 = auto()
    MEMBER3 = auto()

Parameters:

  • EnumName: The name of the enumeration.
  • MEMBER: The symbolic name of the enumeration member.

Examples

Basic Usage

Define a simple enumeration using Flag.

Example

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

print(Permission.READ)
print(Permission.WRITE)
print(Permission.EXECUTE)

Output:

Permission.READ
Permission.WRITE
Permission.EXECUTE

Combining Flags

Combine multiple flags using the bitwise OR (|) operator.

Example

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

combined = Permission.READ | Permission.WRITE
print(combined)

Output:

Permission.READ|WRITE

Checking for Flags

Check if a combined flag includes specific flags using the bitwise AND (&) operator.

Example

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

combined = Permission.READ | Permission.WRITE

print(Permission.READ in combined)
print(Permission.EXECUTE in combined)

Output:

True
False

Iterating Over Flags

Iterate over the members of a Flag enumeration.

Example

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

for permission in Permission:
    print(permission)

Output:

Permission.READ
Permission.WRITE
Permission.EXECUTE

Real-World Use Case

Representing File Permissions

Use a Flag to represent file permissions, allowing combinations of read, write, and execute permissions.

Example

from enum import Flag, auto

class FilePermission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

def check_permission(permission):
    if permission & FilePermission.READ:
        print("Read permission granted")
    if permission & FilePermission.WRITE:
        print("Write permission granted")
    if permission & FilePermission.EXECUTE:
        print("Execute permission granted")

permission = FilePermission.READ | FilePermission.EXECUTE
check_permission(permission)

Output:

Read permission granted
Execute permission granted

Conclusion

The enum.Flag class is used for creating enumerations that represent combinations of bit flags in Python. It allows you to easily combine and check flags using bitwise operations, making it ideal for scenarios like file permissions, feature toggles, and configuration options. Proper usage can enhance the readability and maintainability of your code when dealing with multiple options or features.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top