零基础入门学习Python(22):魔法方法(2)算术运算

零基础入门学习Python(22):魔法方法(2)算术运算

利用type()函数可以知道某个对象是什么类型:

>>> type(int)        #int是类类型
<class 'type'>
>>> a = 2            #定义一个整数a,即a是类类型int的一个对象
>>> type(a)
<class 'int'>
>>> b = 1
>>> a + b            #事实上,Python在将两个对象相加
3

Python中,加、减、乘、除、取模、求平方等都有自己的魔法方法,需要时我们也可以重写这些魔法方法。下面举例说明一下,为了区分重写的魔法方法和原来的魔法方法,我们把加法定义为减法,减法定义为加法。

>>> class TestInt(int):              #继承int类
        def __add__(self,other):     #重写加法魔法方法,返回值调用了int的减法魔法方法
            return int.__sub__(self,other)
        def __sub__(self,other):     #重写减法魔法方法,返回值调用了int的加法魔法方法
            return int.__add__(self,other)

>>> a = TestInt(2)                   #生成一个TestInt类的对象并初始化为2
>>> b = TestInt(1)
>>> a + b                            #先找a的加法方法__add__(),如未找到,则找b的反加法方法__radd__()
1                                    #结果为1,说明运行a的加法方法时调用了int的减法方法

计算 a + b 时,当 a 的加法操作(add)不能实现或者不支持的时候,Pytnon就会找到 b 的反加法操作(radd)。

>>> class TestRint(int):
        def __radd__(self,other):    #重写反加法魔法方法,返回值调用了int的加法魔法方法
            return int.__sub__(self,other)

>>> c = TestRint(5)
>>> d = TestRint(6)
>>> c + d                            #c和d都是TestRint类的对象,继承了int类,即可以找到它们各自的加法方法,因为没有重写,所以使用的是int类中的加法魔法方法
11
>>> c + 1                            #可以找到对象c的加法方法
6
>>> 1 + c                            #找不到1的加法方法,就会调用对象c的反加法方法,即重写之后的方法,方法中self指c,other指1,所以得到(5-1)的结果
4

在进行算术运算时,一定要注意操作数的运算顺序,其它算术运算的魔法方法跟加法类似,下面简单举例说明:

>>> a = int(2)
>>> b = int(3)
>>> a.__sub__(b)
-1
>>> a.__mul__(b)
6
>>> a.__floordiv__(b)                #除法,向下取整
0
>>> a.__mod__(b)                     #取模
2
>>> a.__divmod__(b)                  #返回一个元组:(a//b, a%b)即商和余数
(0, 2)
>>> a.__pow__(b)                     #求平方
8

零基础入门学习Python(21):魔法方法(1)构造和析构

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值