栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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小白不要这么做,毕竟出错就无法独立解决了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/11254.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号