以下内容在 Python 中不起作用:
class MemorySize(int, Enum):
"1024" = 1024
"2048" = 2048
Run Code Online (Sandbox Code Playgroud)
那么,在不必用文字输入整个数字并确保输入安全的情况下,最接近的方法是什么?
来自文档:
枚举是一组绑定到唯一常量值的符号名称(成员)。在枚举中,可以通过身份比较成员,并且可以迭代枚举本身。
因此,枚举成员应该是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)