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
- Introduction
enum.FlagClass Syntax- Examples
- Basic Usage
- Combining Flags
- Checking for Flags
- Iterating Over Flags
- Real-World Use Case
- 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.