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

2020-08-28 14:30:23 +08:00
 uswood

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

代码部分:

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 本身封装好了的,运算符重载的用处只是在为了让用户定义的类拥有“+”的运算,顶多让你自定义在“+”的基础上还做些什么。这样理解对不对, 关于运算符重载能举比较实际点的用处吗?

2937 次点击
所在节点    Python
23 条回复
uswood
2020-08-28 21:00:38 +08:00
@zhaofq 收到安利~
uswood
2020-08-28 21:01:28 +08:00
@volvo007 不不不,我看的是 python 学习手册,这翻译简直了。。
Hsinyao
2020-08-28 22:03:04 +08:00
看到帖子标题我就知道该来安利流畅的 python 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/702208

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX