零基礎入門學習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)構造和析構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章