目前学到运算符重载的部分,书中内容只做了例子,但关于原理有三点疑问弄不明白:
代码部分:
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 本身封装好了的,运算符重载的用处只是在为了让用户定义的类拥有“+”的运算,顶多让你自定义在“+”的基础上还做些什么。这样理解对不对, 关于运算符重载能举比较实际点的用处吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.