python - 向 Python enum.IntEnum 添加属性和起始值

标签 python enums

如何定义以某种方式派生自 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/

    相关文章:

    python - 解析和混合 Steam API 调用

    java - 随着 API 的发展,处理 "int enum"模式与 Java 枚举共存的最佳方法是什么?

    c++ - 在类或文件中定义枚举?

    kotlin - kotlin 中 Enum.values() 和 enumValues() 的区别

    python - 如何导出张量板数据?

    python - 让函数等待,直到返回 'n' 个结果

    c++ - 我收到有关枚举的错误(我认为)

    mysql - MyBatis 从 MySql 数据库中检索整数作为枚举

    python - 类型错误 : Can't convert 'bytes' object to str implicitly using Python3. 5

    python - 从 python 混合器接收空值