定义python中类的“boolness”

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (47)

为什么这不像人们天真地期望的那样起作用呢?

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)

提问于
用户回答回答于

为了实现Python2-3兼容性,只需将其添加到示例中即可:

Foo.__nonzero__ = Foo.__bool__

或扩展foo的原始定义,包括:

__nonzero__ = __bool__

当然,您也可以反向定义它们,其中方法名是__nonzero__你把它分配给__bool__,但我觉得这个名字__nonzero__这只是Python将对象解释为真实或错误的原始C-isness的遗留下来,其基础是对象与零的等价性。只要添加上面的语句,您的代码就可以使用Python2.x,并且在升级到Python3.x时将自动工作(最后,您可以将赋值删除到__nonzero__)

用户回答回答于

扫码关注云+社区

领取腾讯云代金券