Python3 运算符重载问题

在某些圈子中, 运算符重载的名声并不好。 这个语言特性可能(已经)
被滥用, 让程序员困惑, 导致缺陷和意料之外的性能瓶颈。 但是, 如果
使用得当, 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         幂运算
我们可以通过重载运算符,来写出一些简洁高效的代码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值