在某些圈子中, 运算符重载的名声并不好。 这个语言特性可能(已经)
被滥用, 让程序员困惑, 导致缺陷和意料之外的性能瓶颈。 但是, 如果
使用得当, API 会变得好用, 代码会变得易于阅读。 Python3 施加了一些
限制, 做好了灵活性、 可用性和安全性方面的平衡:
1.不能重载内置类型的运算符
2.不能新建运算符, 只能重载现有的
3.某些运算符不能重载——is、 and、 or 和 not(不过位运算符
&、 | 和 ~ 可以)
下面来举一个运算符重载的例子:
class Test:
def __init__(self,v):
self.data = v
def __repr__(self): #消除两边的尖括号
return "Test(%d)"%self.data
def __mul__(self,other):
v = self.data * other.data
return Test(v)
n1 = Test(2)
n2 = Test(3)
n3 = n1*n2
print(n3)
输出如下:
Test(6)
可以看到,我们通过重载*运算符达到了类中数据相乘的效果。
Python3中还有更多的运算符可以重载。
方法名 运算符和表达式 说明
add(self,rhs) self + rhs 加法
sub(self,rhs) self - rhs 减法
mul(self,rhs) self * rhs 乘法
truediv(self,rhs) self / rhs 除法
floordiv(self,rhs) self //rhs 地板除
mod(self,rhs) self % rhs 取模(求余)
pow(self,rhs) self **rhs 幂运算
我们可以通过重载运算符,来写出一些简洁高效的代码了。