鱼C论坛

 找回密码
 立即注册
查看: 332|回复: 5

[已解决]python 魔法方法-----反运算

[复制链接]
最佳答案
4 
发表于 2018-5-13 20:20:32 | 显示全部楼层 |阅读模式
5鱼币
各位好  帮我分析下,看我理解的对不对 如果不对请指点  
如图
  1. class Nint(int):
  2.     def __rsub__(self, other):
  3.         return int.__sub__(self, other)

  4. >>> a = Nint(5)
  5. >>> 3 - a
  6. 2
复制代码

在这里  def __rsub__(self, other)  实例变量a 传进去是传给了  self ,然后执行的时候 返回值return 执行  self == a == 5
return 调用 __sub__ 魔法方法,self - 3 然后就结果就变成 2 了 ?  是这样么?
最佳答案
2018-5-13 20:20:33
本帖最后由 Hacker_Jack 于 2018-5-13 20:36 编辑

在这里a是Nint的一个实例对象,所以调用它自身的 __rsub__(self, other)后,self应该为对象a,这个对象也与return语句中的self是一个东西,楼主理解的并没有问题。因为a在你的代码里是作为被减数(正常数学中的被减数,不是指上述代码中的顺序)存在的,你在IDLE中试着调用任意整型对象的__sub__(self, other)方法,可以很容易得出self就是被减数。所以楼主的理解我认为没有什么问题,如果有错,请楼下纠正吧。

最佳答案

查看完整内容

在这里a是Nint的一个实例对象,所以调用它自身的 __rsub__(self, other)后,self应该为对象a,这个对象也与return语句中的self是一个东西,楼主理解的并没有问题。因为a在你的代码里是作为被减数(正常数学中的被减数,不是指上述代码中的顺序)存在的,你在IDLE中试着调用任意整型对象的__sub__(self, other)方法,可以很容易得出self就是被减数。所以楼主的理解我认为没有什么问题,如果有错,请楼下纠正吧。
最佳答案
11 
发表于 2018-5-13 20:20:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Hacker_Jack 于 2018-5-13 20:36 编辑

在这里a是Nint的一个实例对象,所以调用它自身的 __rsub__(self, other)后,self应该为对象a,这个对象也与return语句中的self是一个东西,楼主理解的并没有问题。因为a在你的代码里是作为被减数(正常数学中的被减数,不是指上述代码中的顺序)存在的,你在IDLE中试着调用任意整型对象的__sub__(self, other)方法,可以很容易得出self就是被减数。所以楼主的理解我认为没有什么问题,如果有错,请楼下纠正吧。
最佳答案
4 
 楼主| 发表于 2018-5-13 20:39:32 | 显示全部楼层
Hacker_Jack 发表于 2018-5-13 20:34
在这里a是Nint的一个实例对象,所以调用它自身的 __rsub__(self, other)后,self应该为对象a,这个对象也与 ...

好的 谢谢
最佳答案
4 
 楼主| 发表于 2018-5-14 10:04:28 | 显示全部楼层
有不同见解么 顶一下
最佳答案
8 
发表于 2018-5-22 18:17:47 | 显示全部楼层
是的,self必然指的是实例对象,反运算的other是非实例对象,因而a=5,other=3,5-3=2
最佳答案
317 
发表于 2018-5-22 18:32:07 | 显示全部楼层
可以
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2018-8-20 13:20

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表