python运算符重载需要遵循惯例吗

663次阅读
没有评论
python运算符重载需要遵循惯例吗

当我们进行各种运算的时候,就会需要涉及到运算符的要点。当运算对象增多时,显然运算符的作用已经不足以支撑整个的运算,这时候我们把运算符重新定义使用,这就是运算符重载的产生。那么我们在使用运算符重载时,还需要按照惯例进行执行吗?这里我们先来对运算符进行简单了解,然后探究惯例的使用。

运算符重载就是重写类内置加减乘除等运算符的方法。这是很有必要的。比如说,两个整数可以加减乘除,那么两个对象的加减乘除就没那么简单了,必须要对运算符重新定义。

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免费测试

相关文章:

版权声明:wuyou2021-05-16发表,共计1127字。
新手QQ群:570568346,欢迎进群讨论 Python51学习