python - 在 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 (),不出现错误。
我不太明白为什么在第一种情况下会导致错误,以及执行魔术方法的第一个和第二个选项有什么区别。如果有人能解释一下,我将不胜感激。
解决方案
魔术__len__
方法应该返回一些东西,在这种情况下,可能是return self.quantity
. 您收到类型错误是因为您的方法隐式返回None
。
使用这些魔术方法的想法是为常用函数定义行为,例如len()
. 如果你调用它 using instance.__len__()
,你就没有使用魔法方法,你只是像一个普通的实例方法一样调用它,这就是为什么你在那个用例中看不到任何错误
推荐阅读
- xamarin.forms - 升级到 4.5.0.396 后 Xamarin.iOS 项目缺少引用错误
- javascript - 动画不同步,如何实现流畅的动画?
- asp.net-core - 如何在图像上添加文本字段以在 ASP.NET Core 中生成 meme?
- ios - 如何使用 SWIFT 制作带有精美动画的天气应用等动画应用
- python - 使用 ctypes 实现 Windows 服务。未调用 ServiceCtrl 处理程序
- python - CSS 没有从我的 Python/Flask 应用程序链接
- python - Python Flask SaaS App 上的自定义域映射
- python - 从源库构建的导入到 python
- reactjs - Typescript,是否可以在没有某种类型的情况下扩展接口?
- javascript - jquery-如何验证表单的每个标签页?