为什么不像天真的预期那样起作用?
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)
x
为了与Python 2-3兼容,只需将其添加到示例中:
Foo.__nonzero__ = Foo.__bool__
或将Foo的原始定义扩展为包括:
__nonzero__ = __bool__
当然,您也可以反过来定义它们,方法名称在哪里,__nonzero__然后将其分配给__bool__,但是我认为该名称__nonzero__只是Python根据其与对象的等价性将对象解释为真或假的原始C- ishness的遗产。零。只需添加上面的语句,您的代码即可在Python 2.x上运行,并且在升级到Python 3.x后(最终将其分配到__nonzero__)自动运行。
__nonzero__
__bool__