前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 魔法方法连载五 实现算术运算

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

作者头像
周辰晨
发布2020-05-22 15:18:23
4110
发布2020-05-22 15:18:23
举报

前言

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

__eq__(self,other) 定义等号的行为 x==y

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

代码语言:javascript
复制
>>> 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__()方法(根据年龄来判断),当然,你也可以任意修改里面的逻辑。 除了重新定义==,我们还可以定义 > >= < <= 等运算符

代码语言:javascript
复制
操作符

__add__(self,other) 定义加法行为

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

代码语言:javascript
复制
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__方法,实现了两个矢量实例对象相加结果是返回一个新的矢量对象,他的属性是两个相加属性的和。当然你也可以实现其他的业务逻辑,常见的业务逻辑操作:

代码语言:javascript
复制
操作符

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师影响力 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • __eq__(self,other) 定义等号的行为 x==y
  • __add__(self,other) 定义加法行为
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档