当我们进行各种运算的时候,就会需要涉及到运算符的要点。当运算对象增多时,显然运算符的作用已经不足以支撑整个的运算,这时候我们把运算符重新定义使用,这就是运算符重载的产生。那么我们在使用运算符重载时,还需要按照惯例进行执行吗?这里我们先来对运算符进行简单了解,然后探究惯例的使用。
运算符重载就是重写类内置加减乘除等运算符的方法。这是很有必要的。比如说,两个整数可以加减乘除,那么两个对象的加减乘除就没那么简单了,必须要对运算符重新定义。
class Vector: def __init__(self, x, y): self.x = x self.y = y def __str__(self): return 'Vector (%d, %d)' % (self.x, self.y) def __add__(self, other): return Vector(self.x + other.x, self.y + other.y) v1 = Vector(6, 8) v2 = Vector(8, -16) print (v1 + v2) 结果: Vector (14, -8)
在正常的加法运算中,表达式会返回加法运算的结果,而加号+两边的对象并不会被修改,我们称这个为加法运算的惯例。每个运行符都有自己的惯例。但同时,你也可以不遵循这些惯例。
我们先来看一个例子:
class A: def __init__(self, v): self.v = v def __add__(self, v): self.v -= v a = A(10) # 以下的代码执行之后,可能并不会得到你想要的结果 # a.v的值为2,而c则为None c = a + 8
在上面的例子中,a的值被修改了;运算符并没做加法运算,而是做了减法;同时,由于__add__并没有返回任何东西(没有返回东西,等同于返回None),所以c的值为None。我们看到, 这个例子就没有遵循加法运算符的惯例,但Python并没有阻止你这么做,正如第0节所介绍的,你可以在语法范围内对运算符进行重新定义,为所欲为。
虽然你可以这么做,但在实际开过程中,你应该尽量地遵循运算符的惯例。例如加法运算符最好是做“加法”逻辑的运算(如数值相加,字符串串连,集合合并等);运算符函数应该返回加法的结果;如果可能的话,尽量不要修改加号+左右两边的对象的值。
从本篇的探究结果来看,我们是可以在python运算符重载时不遵循惯例得。不过这里小编还是建议python小白不要这么做,毕竟出错就无法独立解决了。Python实现Excel数据快速合并方法
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试