You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中and运算符与__bool__方法交互疑问:为何表达式未完全求值?

Python中and运算符与__bool__方法的交互疑惑

环境搭建

创建两个包含__bool__方法的类,该方法在检查真值条件时被调用,始终返回True,并添加打印语句追踪调用时机:

class ClassA(object):
    def __bool__(self):
        print('__bool__ check classA')
        return True

class ClassB(object):
    def __bool__(self):
        print('__bool__ check classB')
        return True

测试用例

测试1

执行if a and b: print(True),输出符合预期:

__bool__ check classA
__bool__ check classB
True

测试2

执行c = (a and b)并print(c),输出与预期不符:

__bool__ check classA
<__main__.ClassB object at 0x0000020ECC6E7F10>

猜测Python按左到右求值,但直到需要时才会调用最终对象的__bool__方法,但不理解原因。

测试3

执行c = (a and b and a)并print(c),输出验证了上述猜测:

__bool__ check classA
__bool__ check classB
<__main__.ClassA object at 0x0000026A81FA7FD0>

测试4

执行c = (a and b and a)后,再执行if c: print(True),此时会触发对象的真值检查:

__bool__ check classA
__bool__ check classB
__bool__ check classA
True

核心问题

为何像(True and a)这样的表达式不会在括号内完成完全求值?


内容的提问来源于stack exchange,提问作者gomory-chvatal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:24:21