在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__()
。