接下来,有 3 个测试例子,可以作进一步的验证:
可以暂停而思考下:bool(Test1) 与 bool(Test1()) 各是什么结果?然后依次判断剩下的两个类,结果又会是什么?
揭晓答案:
bool(Test1) # True
bool(Test2) # True
bool(Test3) # True
bool(Test1()) # True
bool(Test2()) # False
bool(Test3()) # True
原因如下:
● 类对象没被实例化时,bool() 不会调用它的 bool() 或 len() 这两个魔术方法
● 类对象被实例化后,若同时存在 bool() 或 len() 魔术方法,则 bool() 会先调用 bool() 方法(PS:这个方法要求返回值必须为 bool 类型,因此只要有它,就必然不需要再用len() 方法来判断真假)