具有数字名称的枚举

Kar*_*son -3 python enums

以下内容在 Python 中不起作用:

class MemorySize(int, Enum):
    "1024" = 1024
    "2048" = 2048
Run Code Online (Sandbox Code Playgroud)

那么,在不必用文字输入整个数字并确保输入安全的情况下,最接近的方法是什么?

Eug*_*nij 5

来自文档

枚举是一组绑定到唯一常量值的符号名称(成员)。在枚举中,可以通过身份比较成员,并且可以迭代枚举本身。

因此,枚举成员应该是symbolic names,而不是字符串文字。

如果你想使用数字作为名称,你可以在它前面加上_or前缀m_,因为私有属性以下划线开头

此外,您还可以将IntEnum用于整数枚举。

from enum import IntEnum


class MemorySize(IntEnum):
    m_1024 = 1024
    m_2048 = 2048

print(MemorySize.m_1024.value)
Run Code Online (Sandbox Code Playgroud)

输出

1024
Run Code Online (Sandbox Code Playgroud)

另外,您可以在此处省略逗号"1024" = 1024,

实际上1024,是一个只有一个元素的元组(1024, ),并且1024只是 int 类型。我只是很好奇,为什么你可以将 tuple 和 int 传递给 Enum 属性。

我发现IntEnum属性的值传递给int构造函数。在此之前,它将 args 转换为元组EnumMeta.__new__

if not isinstance(value, tuple):
    args = (value, )
else:
    args = value
Run Code Online (Sandbox Code Playgroud)

您可以传递给int构造函数的第二个参数,即 base:because int("ff", 16) == 255。或者只使用字符串常量而不是 int 因为int("123") == 123.

因此,您可以将IntEnum值与任何像这样的数字系统一起使用(尽管我认为这不是在实践中使用它的好方法)

class WeiredEnum(IntEnum):
    m_255 = "ff", 16
    m_256 = "256"

print(WeiredEnum.m_255.value)
print(type(WeiredEnum.m_256.value))
Run Code Online (Sandbox Code Playgroud)
> 255
> <class 'int'>
Run Code Online (Sandbox Code Playgroud)

  • @raiyan22因为`_1024`是[有效的python标识符](https://www.tutorialspoint.com/what-are-python-identifiers) (2认同)