enum
模块的Pythondocs包含以下子类化Enum
的示例.生成的类可用于创建枚举,该枚举还验证它们是否没有两个具有相同值的成员.
>>> class DuplicateFreeEnum(Enum):
... def __init__(self, *args):
... cls = self.__class__
... if any(self.value == e.value for e in cls):
... a = self.name
... e = cls(self.value).name
... raise ValueError(
... "aliases not allowed in DuplicateFreeEnum: %r --> %r"
... % (a, e))
然而,作为一种添加验证的方法,这种方法是不优雅和受限的. for each 成员调用__init__
一次,而为了将枚举作为一个整体进行验证,一起查看枚举的每个成员会更有意义.
例如,我如何验证一个枚举正好有两个成员,如下所示?
class PreciselyTwoEnum(Enum):
... # ???
class Allowed(PreciselyTwoEnum):
FOO = 1
BAR = 2
class Disallowed(PreciselyTwoEnum): # Should raise an error
BAZ = 3
这可以通过巧妙地实现__init__
来实现吗?是否有其他方法可以使用--也许是在完全创建枚举之后在枚举上调用的方法?