创建自定义Python Enum 子类需要哪些方法?

问题描述 投票:0回答:1

我的目标是创建一个自定义 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__

python enums
1个回答
0
投票

我找到了自己问题的答案。 通过运行

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__

© www.soinside.com 2019 - 2024. All rights reserved.