关于运算符重载的原理问题 求大神

uswood 2020-08-28 12:11:29
目前学到运算符重载的部分,书中内容只做了例子,但关于原理有三点疑问弄不明白:

代码部分:

class Test:
def __init__(self, val):
self.val = val
def __add__(self, other):
print('add', self.val, other)
return self.val + other



问题部分:
1、定义运算符重载的时候,它的编写是有规则的吗? 例如定义__add__,一定是接受2个参数(self, other),一定是return self.val + other吗?是否每种运算符重载都有特定的编写规则?还比如__getitem__重载,书中例子写的是:


class Test:
def __getitem__(self, i):
return self.data[1]


2、为什么要这么写? 如果只是想让自定义的类拥有迭代的功能难道只写 def __getitem(self): pass 就可以了吗?

3、在定义的__add__里面,也只是写了“+”这个符号,我的理解是:怎么“加”的是python本身封装好了的,运算符重载的用处只是在为了让用户定义的类拥有“+”的运算,顶多让你自定义在“+”的基础上还做些什么。这样理解对不对, 关于运算符重载能举比较实际点的用处吗?
...全文
28 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧