如何在值为元组时组合标志的成员
我定义了一个叫做 Flag 的枚举,代码是这样的:
@unique
@verify(CONTINUOUS)
class DaysEnum(IntFlag):
ONE = (1, "One Day")
TWO = (2, "Two Days")
THREE = (3, "Three Days")
FOUR = (4, "Four Days")
FIVE = (5, "Five Days")
SIX = (6, "Six Days")
SEVEN = (7, "Seven Days")
EVEN_DAYS = (TWO | FOUR | SIX, "Even Days")
def __init__(self, value, label) -> None:
self.label = label
def __new__(cls, value: int, label: str):
obj = int.__new__(cls, value)
obj._value_ = value
obj.label = label
return obj
根据 Python 的文档,当我从 enum.Flag
这个类继承时,可以把枚举的成员组合在一起。但是运行这段代码时,我遇到了一个错误:TypeError: unsupported operand type(s) for |: 'tuple' and 'tuple'.
看起来我定义成员 EVEN_DAYS
的语法有问题。
那么,考虑到 DaysEnum
的值是元组,正确的语法应该是什么样的,才能组合 EVEN_DAYS
的成员呢?
1 个回答
0
顺便提一下,你不需要用到 __init__
,因为你在 __new__
里已经设置了 .label
。
你遇到的问题是,像 ONE
、TWO
这些名字在解析的时候其实只是元组(tuple)——它们在整个类解析完成之前并不会从元组变成成员。
换句话说,EVEN_DAYS = TWO | FOUR | SIX
这行代码在创建标志之后是可以工作的,但在创建过程中是不行的。