软件测试技术

《Python学习笔记》第十三章

第十三章 操作符重定义

13.1 加减法重定义

Python的基本数据类型如整数、浮点数,能够进行数学运算。类可以吗?看下例:

>>> class RMB:

def __init__(self, sum = 0.0):

self.sum = sum

def __str__(self):

return str(self.sum)

>>> a = RMB()

>>> b = RMB()

>>> a + b

TypeError: unsupported operand types for

+: ’instance’ and ’instance’ #异常信息

我们定义了一个人民币类,然后生成两个实例,这两个实例相加之后,显 示了一条错误信息,表明实例不能进行相加操作。错误信息的意思是,加法操作暂时不支持两个实例操作数。

为了使类的实例也可以进行数学操作,我们需要在类的内部重新定 义数学操作符,使之支持用户定义的数据类型。有些朋友可能马上意识 到,这不是C++中的操作符重载吗?在这里我没有用“重载”这个词, 我认为C++中重载要比Python中的重载概念广泛得多,例如C++函数重 载,在Python中并不存在这个概念(也许我不知道)。因此,我用了重 定义一词。下面得例子中,修改了RMB类,添加了RMB类的加法和减法 操作,也就是RMB类的两个方法: addsub

>>> class RMB: 

def __init__(self, sum = 0.0):

self.sum = sum


def __str__(self): 

return str(self.sum) def __add__(self, other): #重定义加法操作 

return RMB(self.sum + other.sum) 

def __sub__(self, other): #重定义减法操作 

return RMB(self.sum - other.sum) 

通常情况下,第一个参数是调用 add sub 方法的对象。第二个参数 是other,以区别于第一个参数self。两个实例的相加或相减,也就是各自 属性sum的加减,所得的值作为新RMB实例的参数,因此返回值仍是人民币类。请看执行结果:

>>> a = RMB(20000)

>>> b = RMB(234.987)

>>> print a + b

20234.987

>>>print a - b

19765.013 

其实表达式a + b和p1. add (p2)是等同的,我们可以试一试:

>>> a = RMB(34.5) 

>>> b = RMB(345.98) 

>>> print a.__add__(b), a + b

380.48 380.48

>>> print a.__sub__(b), a - b

-311.48 -311.48

相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~