Python提供了对运算符重载的特性
abstract.png 实践Python中的每个运算符都有对应的方法,可在自定义类中重新实现相应的方法,实现改变运算符的行为。这里对常见运算符进行重载
class MyVector:
"""
二维向量
"""
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __str__(self):
return f"[My Vector] x:{self.x}, y:{self.y}"
def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return MyVector(x,y)
def __mul__(self, num):
x = self.x * num
y = self.y * num
return MyVector(x,y)
def __neg__(self):
return MyVector(-1*self.x, -1*self.y)
def __gt__(self, other):
self_sum = self.x + self.y
other_sum = other.x + other.y
if( self_sum > other_sum ) :
return True
else:
return False
加法运算符
使用+加法运算符时,Python会自动调用自定义对象的__add__()方法
print("重载+加法运算符")
my_vector3 = MyVector(1,2)
my_vector4 = MyVector(5,7)
my_vector5 = my_vector3 + my_vector4
print("my_vector3: ", my_vector3)
print("my_vector4: ", my_vector4)
print("my_vector3 + my_vector4: ", my_vector5)
figure 1.png乘法运算符
使用*乘法运算符时,Python会自动调用自定义对象的__mul__()方法
print("重载*乘法运算符")
my_vector6 = MyVector(3,7)
my_vector7 = my_vector6 * 2
print("my_vector6: ", my_vector6)
print("my_vector6 * 2: ", my_vector7)
figure 2.png取负运算符
使用-取负运算符时,Python会自动调用自定义对象的__neg__()方法
print("重载-取负运算符")
my_vector1a = MyVector(11,22)
my_vector1b = -my_vector1a
my_vector2a = MyVector(33,-44)
my_vector2b = -my_vector2a
print(f"my_vector1a -->> {my_vector1a}, my_vector1b -->> {my_vector1b};")
print(f"my_vector2a -->> {my_vector2a}, my_vector2b -->> {my_vector2b};")
figure 3.png大于运算符
使用>大于运算符时,Python会自动调用自定义对象的__gt__()方法
print("重载大于运算符")
my_vector8 = MyVector(111,222)
my_vector9 = MyVector(1,2)
print(f"my_vector8 > my_vector9 : {my_vector8 > my_vector9}")
figure 4.png
参考文献
- Python编程·第3版:从入门到实践 Eric Matthes著
- Python基础教程·第3版 Magnus Lie Hetland著
- 流畅的Python·第1版 Luciano Ramalho著