Suponha que eu tenha
class State(Enum):
TAKEPROFIT = 1
STOPPEDOUT = 2
WINNER = 3
LOSER = 4
Como posso retornar a combinação de eg State.STOPPEDOUT
e State.LOSER
?
O |
não parece ser suportado:
return State.STOPPEDOUT | State.LOSER
lança
TypeError: unsupported operand type(s) for |: 'State' and 'State'
Use um
IntEnum
em vez de umEnum
:An
IntEnum
se comporta como anint
, então:Embora a resposta de @larsks esteja correta, a maneira "mais" correta de fazer isso seria herdar de
IntFlag
(auto()
gera potências de 2; você pode usar seus próprios valores, se desejar):|
,&
e^
as operações resultam em instâncias da mesma classe:in
operações também são suportadas:IntFlag
é uma subclasse deint
eFlag
(que por sua vez é uma subclasse deEnum
) e, portanto, instâncias dele podem ser usadas em qualquer lugar queint
seja esperado:No entanto, se an
IntFlag
for invertido, ele retornará uma união do restante dos sinalizadores:Enums têm um atributo de valor: