python笔记 __bool__

106 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

0 环境

  • 编辑器:pycharm或者vscode
  • 系统版本:windows10
  • python版本:3.9.6

1 使用__bool__

很多时候需要用到布尔判断它是否为true还是false,如下图:

image.png

类实例也可以判断。 image.png

假如我想让它返回False呢,只要加个__bool__即可满足。

class demo:
    def __bool__(self):
        return False

print(bool(demo()))

image.png

也就说明了:如上面所示,当我们没有实现__bool__时,bool(它),默认就是True。假如想有所变动,可以实现__bool__方法,即可得到it.__bool__()

上面的说明,应用到它是一个空列表,第一条默认为True是不适用的。 image.png

虽然没有实现__bool__,但是最终的结果也没问题。应该加上一条,没有实现__bool__方式时,但是呢,实现了__len__方法,根据它的值,返回True还是Fasle。

class demo:
    def __init__(self, a):
        self.a = a

    def __len__(self):
        return self.a

print(bool(demo(0)))
print(bool(demo(1)))

image.png

又有__len__和__bool__,会如何呢,如下代码和图所示,最终执行结果看出,入参为0的,反而为True说明,执行的是__bool__,说明__bool__的优先级更高。

class demo:
    def __init__(self, a):
        self.a = a

    def __len__(self):
        return self.a

    def __bool__(self):
        return self.a == 0

print(bool(demo(0)))
print(bool(demo(1)))

image.png

2 总结

len方法返回必须是非负整数,不然会报值错误,提示return >= 0才可。使用__bool__时,bool方法必须返回bool,不能时None等类型,不然会提示需要返回bool,而你返回的NoneType。bool是很有用的的,在判断和循环中,少不得要用到它。还有就是bool的几点:既没有__bool__方法和__len__方法时,返回值为True。当既有__bool__方法和__len__方法时,跟着__bool__方法走。当只有__len__方法时,猴子称大王,跟着__len__走。