我有以下enum定义:
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
现在打印的值是
D.x
相反,我想打印enum的值
1
要实现这个功能,可以做些什么呢?
我有以下enum定义:
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
现在打印的值是
D.x
相反,我想打印enum的值
1
要实现这个功能,可以做些什么呢?
当前回答
最直接的dunder方法是_repr_而不是_str_,因为它也允许你在列表中以这种方式打印它。
class D(Enum):
x = 1
y = 2
def __repr__(self):
return self.value
print([D.x,D.y])
>>> [1, 2]
其他回答
如果你想将枚举成员与Int值进行比较,更好的方法是扩展IntEnum:
from enum import IntEnum
class D(IntEnum):
x = 1
y = 2
print(D.x)
通过这种方式,你可以在不显式调用.value的情况下将枚举的值与整数进行比较:
>>> D.x == 1
True
有关更多信息,您可以查看Python文档的这一部分:Enum比较
如果你打算使用f-string打印value,那么你可以从enum和str继承你的enum。这样你就可以同时拥有对象的value和name。例如:
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
这与如果你不继承任何东西相反,你将得到value而不是name:
class D:
x = 1
y = 2
print(D.x)
print(f"{D.x}")
输出
1
1
这就是为什么同时从str和Enum继承时,你会得到完整的限定名和值。
最直接的dunder方法是_repr_而不是_str_,因为它也允许你在列表中以这种方式打印它。
class D(Enum):
x = 1
y = 2
def __repr__(self):
return self.value
print([D.x,D.y])
>>> [1, 2]
我使用以下方法实现了访问
class D(Enum):
x = 1
y = 2
def __str__(self):
return '%s' % self.value
现在我可以做了
打印(D.x)得到1作为结果。
如果你想打印x而不是1,你也可以使用self.name。
您正在打印enum对象。如果你只是想打印它,使用.value属性:
print(D.x.value)
请参阅对枚举成员及其属性的编程访问部分:
如果你有一个enum成员,并且需要它的名称或值: >>> >>>成员= Color.red > > > member.name “红色” > > > 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