Python枚举:如何使枚举成员的行为类似于零?
我有enum,我想要一些像0一样的常量。默认情况并非如此(这本身就很奇怪)。我已经尝试将非零方法直接绑定到enum成员,但在if station中没有调用它。发生什么事了!?有没有明确的方法让FOO表现得像0Python枚举:如何使枚举成员的行为类似于零?,python,python-2.7,enums,Python,Python 2.7,Enums,我有enum,我想要一些像0一样的常量。默认情况并非如此(这本身就很奇怪)。我已经尝试将非零方法直接绑定到enum成员,但在if station中没有调用它。发生什么事了!?有没有明确的方法让FOO表现得像0 from enum import Enum class A(Enum): FOO = 0 BAR = 1 if A.FOO: print 'foo!' if A.BAR: print 'bar!' setattr(A.FOO, '__nonzero__', (lamb
from enum import Enum
class A(Enum):
FOO = 0
BAR = 1
if A.FOO: print 'foo!'
if A.BAR: print 'bar!'
setattr(A.FOO, '__nonzero__', (lambda self:False).__get__(A.FOO, A.FOO.__class__))
if A.FOO: print 'foo!'
print A.FOO.__nonzero__()
输出
foo!
bar!
foo!
False
Upd:对于Python 2.7,zvone的解决方案如下所示,并且运行良好:
from enum import Enum
class A(Enum):
FOO = 0
BAR = 1
def __nonzero__(self): return self!=A.FOO
if A.FOO: print 'foo!'
if A.BAR: print 'bar!'
这里有几个问题:
- Python2.7中没有
(问题标记为2.7)-参见;也许您正在使用后端口enum
- Python3.4及更高版本中有
,但没有enum
(Python3使用\uuuu非零\uuuu
)\uuu bool\uuu
/\uuuuu nonzero\uuuu
方法(如果存在)必须在类上定义,而不是在实例上定义\uuuuu bool\uuuu
class A(Enum):
FOO = 0
BAR = 1
def __bool__(self):
# only return False for A.FOO
return self != A.FOO
以及Python 2的解决方案:
class A(Enum):
FOO = 0
BAR = 1
def __nonzero__(self):
# return boolean value of any A
return bool(self._value_)
从
IntEnum
派生如何?期望输出?期望输出:无“foo!”杰出的谢谢我使用的是pyhton 2.7和enum34 lib(?,默认情况下与anaconda一起安装)。在类A(而不是bool)中实现非零的解决方案运行良好@zvone:你能介绍一下Python2.7的部分吗,并提到它以及在哪里可以找到它?@EthanFurman我对enum34
一无所知。如果您觉得答案可以改进,请随意选择-答案对您来说也是可编辑的;)