首页 > 解决方案 > 在 Python 中使用具有以下语法的类的魔术方法有什么区别:method(member) 和 member.__method__()?

问题描述

我创建了一个类并使用以下代码指定了成员的属性:

Mexico_66 = Product('Mexico 66 VIN', 99.90, 4)

在课堂上,我定义了以下魔术方法:

def __len__(self):
    print(self.quantity)

当我尝试使用以下语法使用此魔术方法时:len(Mexico_66),代码执行但在最后给出错误:TypeError:'NoneType'对象不能解释为整数

但是,当使用以下语法执行代码时:Mexico_66。len (),不出现错误。

我不太明白为什么在第一种情况下会导致错误,以及执行魔术方法的第一个和第二个选项有什么区别。如果有人能解释一下,我将不胜感激。

标签: pythonclasssyntaxclass-methodmagic-methods

解决方案


魔术__len__方法应该返回一些东西,在这种情况下,可能是return self.quantity. 您收到类型错误是因为您的方法隐式返回None

使用这些魔术方法的想法是为常用函数定义行为,例如len(). 如果你调用它 using instance.__len__(),你就没有使用魔法方法,你只是像一个普通的实例方法一样调用它,这就是为什么你在那个用例中看不到任何错误


推荐阅读