Skip to content Skip to sidebar Skip to footer

How To Override Iteration Behavior Of A Enum Flag Subclass?

I'm trying to override iteration behavior for a Flag enum: from enum import Flag, auto class MyFlags(Flag): A = auto() B = auto() C = auto() D = A | C de

Solution 1:

You can sublass EnumMeta and then add metaclass= to your Enum class:

from enum import Flag, EnumMeta, auto


class MyEnumMeta(EnumMeta):
    def __iter__(self):
       for x in super().__iter__():
           if x.value % 2 == 0:
                yield x


class MyFlags(Flag, metaclass=MyEnumMeta):
    A = auto()
    B = auto()
    C = auto()
    
    D = A | C


print(list(MyFlags))

Prints:

[<MyFlags.B:2>, <MyFlags.C:4>]

Post a Comment for "How To Override Iteration Behavior Of A Enum Flag Subclass?"