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
Falsedog == 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 魔法方法连载五,实现算术运算的主要内容,如果未能解决你的问题,请参考以下文章