如何定义以某种方式派生自 int
的 Python 枚举类,具有自定义起始值,并添加自定义属性?我知道如何从 int
推导出来使用 enum.IntEnum
并设置起始值,
Goo = enum.IntEnum("Goo", "MOO FOO LOO", start = 42)
以及如何将自定义属性添加到基本枚举类型,class Goo(enum.Enum):
MOO = (42, "forty-two")
FOO = (43, "forty-three")
LOO = (44, "forty-four")
def __init__(self, value, alias):
self._value = value #self.value gives AttributeError, as expected, grrr...
self.alias = alias
但是我该怎么做这三个呢?我已经尝试了所有 __new__()
也,class Goo(int, enum.Enum):
MOO = (42, "forty-two")
FOO = (43, "forty-three")
LOO = (44, "forty-four")
def __new__(cls, value, alias):
self = super().__new__(cls, value)
self.alias = alias
return self
主要是奇怪的错误,TypeError: int() takes at most 2 arguments (3 given)
在这种情况下。谢谢。吉姆
最佳答案
您想要的行为在标准库中尚不可用 Enum
.您可以使用 itertools.count()
获取数字:
from enum import IntEnum
from itertools import count
_goo_count = count(42)
class Goo(IntEnum):
#
MOO = "forty-two"
FOO = "forty-three"
LOO = "forty-four"
#
def __new__(cls, alias):
value = next(_goo_count)
member = int.__new__(cls, value)
member._value_ = value
member.alias = alias
return member
或者您可以使用 aenum
:from aenum import IntEnum
class Goo(IntEnum):
_start_ = 42
_init_ = 'alias'
#
MOO = "forty-two"
FOO = "forty-three"
LOO = "forty-four"
无论哪种方式,在使用中它看起来像:>>> Goo.MOO
<Goo.MOO: 42>
>>> Goo.MOO.alias
'forty-two'
>>> Goo.MOO == 42
True
几个风格说明:披露:我是 Python stdlib
Enum
的作者, enum34
backport ,以及 Advanced Enumeration ( aenum
)图书馆。
关于python - 向 Python enum.IntEnum 添加属性和起始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64038885/