4-4 Python类的数学运算
本节编程练习不计算学习进度,请电脑登录imooc.com操作

Python类的数学运算

事实上,Python很多的操作都是通过内建函数来实现的,比如最熟悉的加减乘除,都是通过内建函数来实现的,分别是__add____sub____mul____truediv__。因此,只要我们的自定义类实现了相关的内建函数,我们的类对象,也可以做到加减乘除。
对于有理数,我们可以使用Rational类来表示:

​class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q

其中,p、q 都是整数,表示有理数 p/q。
如果要让Rational进行加法运算,需要正确实现__add__:

class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q
    def __add__(self, r):
        return Rational(self.p * r.q + self.q * r.p, self.q * r.q)
    def __str__(self):
        return '{}/{}'.format(self.p, self.q)

定义好后,就可以尝试一下有理数的加法了:

>>> r1 = Rational(1, 2)
>>> r2 = Rational(2, 3)
>>> print(r1 + r2)
7/6

需要注意__add__()函数,它有一个参数,表示的是运算的第二个操作数,比如:r1 + r2,那么在__add__()方法中的参数,r指的就是r2,这个参数是运算符重载的时候传递的。
另外,细心的同学可能注意到了,相比加减乘的特殊方法,除法的特殊方法名字较长
__truediv__,并且含有true这样的描述,这其实和Python除法是有关系的。
Python的除法可以分为地板除(你没看错,就是地板)和普通除法,地板除的特殊方法是
__floordiv__,普通除法是__truediv__
地板除法和普通除法不一样,地板除法的结果只会向下取整数

>>> num = 5
>>> num.__truediv__(3)
1.6666666666666667
>>> num.__floordiv__(3)
1 # 向下取整
>>> num = 7
>>> num.__floordiv__(3)
2

在运算中,普通除法使用/表示,而地板除使用//表示。

>>> 5 / 3
1.6666666666666667
>>> 5 // 3
1

任务

Rational类虽然可以做加法,但无法做减法、乘法和除法,请继续完善Rational类,实现四则运算。

 

  1. # Enter a code
  2.  
下一节