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