获取枚举在字符串转换中的值
我定义了一个枚举(enum),它的作用是给一组相关的常量起个名字,方便使用。
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
现在打印出来的值是
D.x
但我想要打印出枚举的值
1
那我该怎么做才能实现这个功能呢?
5 个回答
5
最简单的特殊方法是使用 __repr__ 而不是 __str__,因为这样在列表中打印的时候也能以这种方式显示。
class D(Enum):
x = 1
y = 2
def __repr__(self):
return self.value
print([D.x,D.y])
>>> [1, 2]
编辑:
因为如果你用 print(D.x) 还是会打印出 D.x,所以我觉得更好的方法是同时添加 __str__ 方法。
class D(Enum):
x = 1
y = 2
def __str__(self):
return str(self.value)
def __repr__(self):
return str(self)
7
如果你想把你的枚举成员和 Int
值进行比较,比较好的方法是扩展 IntEnum
:
from enum import IntEnum
class D(IntEnum):
x = 1
y = 2
print(D.x)
这样的话,你就可以直接把枚举的值和整数进行比较,而不需要特别调用 .value
:
>>> D.x == 1
True
想了解更多信息,可以查看Python文档的这一部分:枚举比较
17
如果你想用 f-string 打印值,可以让你的枚举类同时继承 Enum
和 str
。这样你就可以同时得到对象的值和名字。例如:
from enum import Enum
class D(str, Enum):
x = 1
y = 2
print(D.x)
print(f"{D.x}")
输出结果:
D.x
1
如果只继承 Enum
,那么你总是会得到一个完整的名字。
class D(Enum):
x = 1
y = 2
print(D.x)
print(f"{D.x}")
输出结果
D.x
D.x
这和如果什么都不继承的情况正好相反,那样你得到的就是值,而不是名字:
class D:
x = 1
y = 2
print(D.x)
print(f"{D.x}")
输出结果
1
1
所以,继承 str
和 Enum
后,你就能同时得到完整的名字和对应的值。
30
我用以下代码实现了访问功能
class D(Enum):
x = 1
y = 2
def __str__(self):
return '%s' % self.value
现在我只需要执行
print(D.x)
就能得到 1
这个结果。
如果你想打印 x
而不是 1
,你也可以使用 self.name
。
436
你现在是在打印一个枚举(enum)对象。如果你只是想打印它的值,可以使用 .value
属性:
print(D.x.value)
你可以查看 程序化访问枚举成员及其属性 这一部分:
如果你有一个枚举成员,想要获取它的名字或值:
>>> >>> member = Color.red >>> member.name 'red' >>> member.value 1
如果你只是想提供一个自定义的字符串表示,可以给你的枚举添加一个 __str__
方法:
class D(Enum):
def __str__(self):
return str(self.value)
x = 1
y = 2
示例:
>>> from enum import Enum
>>> class D(Enum):
... def __str__(self):
... return str(self.value)
... x = 1
... y = 2
...
>>> D.x
<D.x: 1>
>>> print(D.x)
1