wim*_*wim 64 python boolean class python-2.x python-2.7
为什么这不是天真的预期?
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'
Run Code Online (Sandbox Code Playgroud)
(输出是x)
Pau*_*McG 68
对于Python 2-3兼容性,只需将其添加到您的示例中:
Foo.__nonzero__ = Foo.__bool__
Run Code Online (Sandbox Code Playgroud)
或者扩展Foo的原始定义以包括:
__nonzero__ = __bool__
Run Code Online (Sandbox Code Playgroud)
你当然也可以反过来定义它们,方法名称是__nonzero__你所指定的__bool__,但是我认为这个名称__nonzero__只是Python根据它们的等价性将对象解释为真实或虚假的原始C-ishness的遗产.零.只需添加上面的语句,您的代码将与Python 2.x一起使用,并在升级到Python 3.x时自动工作(并最终将您的任务分配给__nonzero__).