我的目标是创建一个自定义 Enum 子类,类似于 IntEnum 或 StrEnum,以包含元组作为值。 但是,我不确定我应该考虑哪些魔法方法。到目前为止,这是我目前的状态:
class TupleEnum(enum.Enum):
def __eq__(self, other):
if isinstance(other, enum.Enum):
return self.value == other.value
else:
return self.value == other
def __hash__(self):
return hash(self.value)
这允许我将类与元组进行比较并访问映射值。但是,我不知道应该编码哪一个来将其值计算到函数中。 例如,比较 IntEnum 我得到以下结果:
class Numbers(enum.IntEnum):
A = 1
B = 2
class Tuples(TupleEnum):
A = (0, 0, 0)
b = (1, 1, 1)
np.array([Numbers.A, Numbers.B])
>>> array([1, 2])
np.array([Tuples.A, Tuples.B])
>>> array([<Tuples.A: (0, 0, 0)>, <Tuples.B: (1, 1, 1)>])
我缺少哪种方法来获取与 IntEnum 类似的数组? 另外,您能推荐其他方法吗? (当然,稍后会包括
__str__
)
我找到了自己问题的答案。 通过运行
help(enum.IntEnum)
我可以看到它的构造函数为 class IntEnum(builtins.int, ReprEnum)
因此,为了达到我的目标,以下代码片段就是我所需要的:
class TupleEnum(builtins.tuple, enum.ReprEnum):
"""Enumeration where members are tuples"""
class Tuples(TupleEnum):
A = (0, 0, 0)
B = (1, 1, 1)
还有 JFI、ReprEnum 仅更改
__repr__