在 Python: method(member) 和 member.__method__() 中使用具有以下语法的 class 的魔术方法有什么区别?
What is the difference between using magic method of a class with following syntaxes in Python: method(member) and member.__method__()?
我创建了一个class,指定了成员的属性,代码如下:
Mexico_66 = 产品('Mexico 66 VIN', 99.90, 4)
在class中,我定义了如下魔术方法:
def __len__(self):
print(self.quantity)
当我尝试使用具有以下语法的魔术方法时:len(Mexico_66),代码执行但在最后给出错误:TypeError: 'NoneType' object cannot be解释为整数
但是,当执行具有以下语法的代码时:Mexico_66.len(),没有出现错误。
不太明白第一种情况为什么会报错,执行魔术方法的第1和第2个选项有什么区别。如果有人能解释一下,我将不胜感激。
__len__
魔术方法应该 return 一些东西,在这种情况下,可能 return self.quantity
。您收到类型错误是因为您的方法隐式 returns None
.
使用这些魔术方法的想法是为 len()
等常用函数定义行为。如果您使用 instance.__len__()
调用它,则您没有使用魔法方法,您只是像调用常规实例方法一样调用它,这就是为什么您在该用例中看不到任何错误的原因
我创建了一个class,指定了成员的属性,代码如下:
Mexico_66 = 产品('Mexico 66 VIN', 99.90, 4)
在class中,我定义了如下魔术方法:
def __len__(self):
print(self.quantity)
当我尝试使用具有以下语法的魔术方法时:len(Mexico_66),代码执行但在最后给出错误:TypeError: 'NoneType' object cannot be解释为整数
但是,当执行具有以下语法的代码时:Mexico_66.len(),没有出现错误。
不太明白第一种情况为什么会报错,执行魔术方法的第1和第2个选项有什么区别。如果有人能解释一下,我将不胜感激。
__len__
魔术方法应该 return 一些东西,在这种情况下,可能 return self.quantity
。您收到类型错误是因为您的方法隐式 returns None
.
使用这些魔术方法的想法是为 len()
等常用函数定义行为。如果您使用 instance.__len__()
调用它,则您没有使用魔法方法,您只是像调用常规实例方法一样调用它,这就是为什么您在该用例中看不到任何错误的原因