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

Python类未定义__bool__时,if obj语句调用哪个特殊方法?

问题解答

Python中if语句做真值判断的逻辑是按固定优先级执行的:

  • 第一优先级:查找类是否定义了__bool__方法,存在则直接调用,以方法返回值的布尔结果作为判断依据。
  • 第二优先级:如果没有__bool__方法,就查找类是否定义了__len__方法,存在则调用,方法返回0判定为假,返回非0值判定为真。
  • 兜底规则:如果两个方法都没有定义,解释器不会调用任何实例方法做额外判断,默认将该类的实例判定为真值。

回到你给出的测试场景,你打印的dir(obj)结果里既没有__bool__也没有__len__,说明这个自定义类没有重写这两个和真值判断相关的方法,它继承的基类object本身也没有实现这两个方法。这种情况下if判断根本不会调用你列出的任何一个特殊方法,直接走兜底规则把obj判定为True,所以会输出Inside if。

你可以自己写代码验证这个逻辑:

  1. 给类加一个返回0的__len__方法,不定义__bool__,if判断就会得到False结果:
class CustomObject:
   def __init__(self, value):
       self.value = value
   def __len__(self):
       return 0

obj = CustomObject(10)
if obj:
    print("Inside if") # 这段代码不会执行
  1. 如果同时定义__bool__和__len__,永远会优先调用__bool__,不会触发__len__的逻辑。

内容的提问来源于stack exchange,提问作者Pooya Mohammadi Kazaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:01:20