问题描述
Mexico_66 = Product('Mexico 66 VIN',99.90,4)
在类中,我定义了以下魔术方法:
def __len__(self):
print(self.quantity)
当我尝试使用具有以下语法的魔术方法时:len(Mexico_66),代码执行但在最后发出错误:TypeError: 'nonetype' object cannot be interpret as an integer
但是,当使用以下语法执行代码时:Mexico_66.len(),没有出现错误。
我不太明白为什么在第一种情况下会导致错误以及执行魔术方法的第一个和第二个选项之间有什么区别。如果有人能解释一下,我将不胜感激。
解决方法
__len__
魔法方法应该返回一些东西,在这种情况下,可能是 return self.quantity
。您收到类型错误是因为您的方法隐式返回 None
。
使用这些魔术方法的想法是为常用函数(如 len()
)定义行为。如果您使用 instance.__len__()
调用它,则您没有使用魔术方法,您只是像常规实例方法一样调用它,这就是为什么您在该用例中看不到任何错误