为什么这并不像人们天真地期望的那样工作呢?
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
)
发布于 2011-11-21 09:24:54
为了与Python 2-3兼容,只需在示例中添加以下内容:
Foo.__nonzero__ = Foo.__bool__
或者将Foo的原始定义扩展为包括:
__nonzero__ = __bool__
当然,您也可以反向定义它们,方法名为__nonzero__
并将其赋值给__bool__
,但我认为__nonzero__
这个名称只是继承了原来Python将对象解释为真或假的传统,这种解释基于对象与零的等价性。只需添加上面的语句,您的代码就可以在Python2.x上运行,并在升级到Python3.x时自动运行(最终您可以将赋值任务交给__nonzero__
)。
发布于 2011-11-21 07:14:16
在Python3中使用__bool__
方法。对于Python2,您需要__nonzero__
。
发布于 2011-11-21 07:10:26
因为对应的特殊方法在Python2中称为__nonzero__()
,而在Python3之前不是__bool__()
。
https://stackoverflow.com/questions/8205558
复制相似问题