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
相关产品推荐
相关产品推荐

