我们知道,当变量类型为数字类型如整数,浮点型的时候,我们可以对变量算术运算,但当变量类型是自定义的类时,还可不可以进行算术运算呢?答案是肯定的,但必须通过实现特定的魔法方法才能实现,下面我就举例介绍
__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__()
方法(根据年龄来判断),当然,你也可以任意修改里面的逻辑。
除了重新定义==,我们还可以定义 > >= < <= 等运算符
操作符
__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__
方法,实现了两个矢量实例对象相加结果是返回一个新的矢量对象,他的属性是两个相加属性的和。当然你也可以实现其他的业务逻辑,常见的业务逻辑操作:
操作符
类似的模范方法还有很多,大家在工作和学习过程中注意积累就行!