Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python枚举:如何使枚举成员的行为类似于零?_Python_Python 2.7_Enums - Fatal编程技术网

Python枚举:如何使枚举成员的行为类似于零?

Python枚举:如何使枚举成员的行为类似于零?,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

我有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__', (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中没有
    enum
    (问题标记为2.7)-参见;也许您正在使用后端口
  • Python3.4及更高版本中有
    enum
    ,但没有
    \uuuu非零\uuuu
    (Python3使用
    \uuu bool\uuu
  • \uuuuu nonzero\uuuu
    /
    \uuuuu bool\uuuu
    方法(如果存在)必须在类上定义,而不是在实例上定义
最后,Python 3中有一个解决方案:

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
一无所知。如果您觉得答案可以改进,请随意选择-答案对您来说也是可编辑的;)