鱼C论坛

 找回密码
 立即注册
查看: 2329|回复: 4

42讲里重载魔法方法应该怎么正确的return?

[复制链接]
发表于 2016-7-16 11:41:17 | 显示全部楼层 |阅读模式
1鱼币
比如说
  1. class Nstr(str):
  2.     def __sub__(self, other):
  3.         return self.replace(other, '')
复制代码

它return 的是self.replace(other,''),为啥不是返回str.replace(other, '')


  1. class New_int(int):
  2.         def __add__(self,other):
  3.                 return int.__sub__(self,other)
复制代码

它返回的是int.__sub__(self,other)

最佳答案

查看完整内容

这两者的机制是不一样的 第一个replace函数是对对象操作的,比如 replace前面是你要操作的一个对象 第二个是在你定义的__add__方法里面,实现原来int本身的__sub__方法。 具体要怎么写,是根据每个函数如何使用来决定的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-16 11:41:18 | 显示全部楼层
这两者的机制是不一样的

第一个replace函数是对对象操作的,比如
  1. >>> a = 'aaaabbbbb'
  2. >>> a.replace( 'a', 'c')
  3. 'ccccbbbbb'
复制代码

replace前面是你要操作的一个对象

第二个是在你定义的__add__方法里面,实现原来int本身的__sub__方法。

具体要怎么写,是根据每个函数如何使用来决定的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-16 23:55:18 | 显示全部楼层
shuofxz 发表于 2016-7-16 22:52
这两者的机制是不一样的

第一个replace函数是对对象操作的,比如


是不是return操作后的对象?
第二个能不能看成int是被操作后的对象?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-17 00:11:39 | 显示全部楼层
leozyre 发表于 2016-7-16 23:55
是不是return操作后的对象?
第二个能不能看成int是被操作后的对象?

不是这么理解的
return 是要先进行后面的操作,然后将后面操作计算完的值进行返回
搜狗截图20160717001053.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-26 11:58:53 | 显示全部楼层
shuofxz 发表于 2016-7-16 11:41
这两者的机制是不一样的

第一个replace函数是对对象操作的,比如

赞同楼主,楼主说的很清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 18:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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