Python 魔法方法连载五,实现算术运算

Posted 软件测试小dao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 魔法方法连载五,实现算术运算相关的知识,希望对你有一定的参考价值。

关注我,每天分享软件测试技术干货、面试经验,想要领取测试资料、进入软件测试学习交流群的可以直接加群644956177~~

前言

我们知道,当变量类型为数字类型如整数,浮点型的时候,我们可以对变量算术运算,但当变量类型是自定义的类时,还可不可以进行算术运算呢?答案是肯定的,但必须通过实现特定的魔法方法才能实现,下面我就举例介绍

__ eq __(self,other) 定义等号的行为 x==y
当两个数字做比较如 3==5,我们能明确的得出答案,那么,如果对于两个自定义类对象呢,如果判断他们是否相等,这个时候我们就需要重载类中的__eq__(self,other)方法了,看下面示例:

class Animal():
… def init(self,name,age):
… self.name = name
… self.age = age
… def eq(self,other):
… return self.age == other.age

dog = Animal(‘kitty’,20)
dog2 = Animal(‘burce’,21)
dog3 = Animal(‘jacky’,20)
dog == dog2
False

dog == dog3
True

可以看出,两个示例对象做做 == 比较,实际上是调用的__eq__()方法(根据年龄来判断),当然,你也可以任意修改里面的逻辑。
除了重新定义==,我们还可以定义 > >= < <= 等运算符

方法名操作符
gt(self,other)>
ge(self,other)>=
lt(self,other)<
le(self,other)<=
ne(self,other)!=

__ add __(self,other) 定义加法行为
介绍了比较运算符的重新定义,当然对类实例对象的算术运算符也是可以重新定义的,我们就拿加法 + 号 来举例:

class vector(): …
def init(self,a,b): …
self.a= a …
self.b = b …
def add(self,other):
… return vector(self.a + other.a, self.b + other.b) …
def str(self): …
return ‘vertor(%d,%d)’
%(self.a,self.b)

v1 = vector(2.5)
v2 = vector(1,6)
print(v1 + v2)
vector(3,11)

定义了一个矢量类,并重载了__add__方法,实现了两个矢量实例对象相加结果是返回一个新的矢量对象,他的属性是两个相加属性的和。当然你也可以实现其他的业务逻辑,常见的业务逻辑操作:

方法名操作符
sub(self, other)-
mul(self, other)*
truediv(self, other)/
floordiv(self, other)//
mod(self, other)%

类似的模范方法还有很多,大家在工作和学习过程中注意积累就行!

最后:【可能给予你一定的帮助】

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
关注我的微信公众号【软件测试小dao】免费获取~

我的学习交流群:644956177 群里有技术大牛一起交流分享~

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

以上是关于Python 魔法方法连载五,实现算术运算的主要内容,如果未能解决你的问题,请参考以下文章

详解图像处理的算术运算与逻辑运算

Python运算符 ( 算术运算符 | 赋值运算符 )

python 算术运算

AI基础python:openCV——图像算术运算:按位运算

python 算术运算符

Python中的算术运算符都有哪些呢?