2006世界杯巴西
crontab -e 定时任务文件保存及查看地方
一墨滢一:
hack一下:
[code=python]
class A:
def __len__(self):
return 1
a = A()
print(bool(a))
if a:
print('ok')
[/code]
文中出现的报错并不是因为没有定义__bool__,而是因为:我们尝试把对象a(类型是A)转化为布尔型,所以python先尝试调用了对象a的__bool__方法,发现__bool__方法不存在,于是调用了__len__方法,而文中的__len__方法返回值为None(因为没有return语句 执行完函数自动返回了None),所以解释器尝试把None作为数字处理(TypeError: 'NoneType' object cannot be interpreted as an integer),这才产生了报错。
也就是说,是否报错对于bool方法和len方法来说是一个或运算,二者之间只要有一个有、或者都有,就不会报错,只有二者都不存在,才会报错。当然如果bool方法和len方法的返回值错误(bool限定返回布尔值 len限定返回int),那么即便两个方法都存在,也会报错。
