Python 枚举-在字符串转换时获取枚举值

Python 枚举-在字符串转换时获取枚举值,python,python-3.x,enums,python-3.4,Python,Python 3.x,Enums,Python 3.4,我定义了以下枚举 from enum import Enum class D(Enum): x = 1 y = 2 print(D.x) 现在打印值为 D.x 相反,我想打印枚举的值 1 hh如何实现此功能?您正在打印枚举对象。如果只想打印以下内容,请使用.value属性: print(D.x.value) 见: 如果您有枚举成员并需要其名称或值: >>> >>> member = Color.red >>>

我定义了以下枚举

from enum import Enum


class D(Enum):
    x = 1
    y = 2


print(D.x)
现在打印值为

D.x
相反,我想打印枚举的值

1
hh如何实现此功能?

您正在打印枚举对象。如果只想打印以下内容,请使用
.value
属性:

print(D.x.value)
见:

如果您有枚举成员并需要其名称或值:

>>>
>>> member = Color.red
>>> member.name
'red'
>>> member.value
1
如果您只想提供自定义字符串表示形式,则可以将
\uuuu str\uuu
方法添加到枚举中:

class D(Enum):
    def __str__(self):
        return str(self.value)

    x = 1
    y = 2
演示:

>>从枚举导入枚举
>>>D类(枚举):
...     定义(自我):
...         返回str(self.value)
...     x=1
...     y=2
... 
>>>D.x
>>>打印(D.x)
1.

我使用以下方法实现了访问

class D(Enum):
    x = 1
    y = 2

    def __str__(self):
        return '%s' % self.value
现在我可以做了

打印(D.x)
以获得结果
1


您也可以使用
self.name
来打印
x
而不是
1

我应该澄清访问参数,我知道D.x.value,我想要的是D.x字符串转换来返回值,如果问题没有明确说明条件,很抱歉。为什么要使用字符串格式和
self.\u value\u
return str(self.value)
更简单。我刚刚查看了源代码,这就是它的实现方式,但是您是对的,
self.value
更简洁。单下划线属性是生成的枚举类的内部属性;最好坚持使用文档化的属性(它恰好是一个特殊的描述符,这样您仍然可以在枚举类型上使用
value
作为名称)。@MartijnPieters同意当我将它与一个整数值进行比较时,它将作为对象返回。例如:
如果D.x==10:…
。我应该用什么方法来处理整数?@alper:完全一样
D.x
是枚举对象,
D.x.value
是整数值。如果必须让枚举值像整数一样工作,请使用,其中每个元素都是
int
的子类,因此
IntEnumD.x==10
将起作用。我添加了
def\uu eq\uuuuuuuuu(self,other):return int(self.value)=other
def\uu int\uuuuuuuuuuuuuuuuuu(self):return int(self.value)
但我仍然认为我必须在不使用的情况下使用
.value
comparing@alper:当
其他
是另一个枚举值时,
均衡
实现不起作用
D.x==D.y
,其中
D.x.value==D.y.value
将为真,例如将失败。听起来您想在那里使用
IntEnum
而不是
Enum
class D(Enum):
    x = 1
    y = 2

    def __str__(self):
        return '%s' % self.value