在python中定义一个类的“boolness”

为什么不这样做可能天真的预期?

class Foo(object): def __init__(self): self.bar = 3 def __bool__(self): return self.bar > 10 foo = Foo() if foo: print 'x' else: print 'y' 

(输出是x

对于Python 2-3兼容性,只需将其添加到您的示例:

 Foo.__nonzero__ = Foo.__bool__ 

或者扩大Foo的原始定义来包括:

 __nonzero__ = __bool__ 

你当然也可以定义它们,方法名称是__nonzero__并且把它分配给__bool__ ,但是我认为名称__nonzero__只是Python原来的解释对象的传统,就像真理或者虚假一样。它们与零等价。 只需添加上面的语句,您的代码就可以与Python 2.x一起工作,并且在您升级到Python 3.x时自动工作(最终您将分配放到__nonzero__ )。

__bool__方法在Python 3中使用。对于Python 2,您需要__nonzero__

因为相应的特殊方法在Python 2中被称为__nonzero__() ,而不是Python 3之前的__bool__()