零基礎入門學習Python(21):魔法方法(1)構造和析構

零基礎入門學習Python(21):魔法方法(1)構造和析構

從這節開始,我們介紹下Python的魔法方法:魔法方法總是被雙下劃線包圍。
之前有提到過初始化的魔法方法__init__(),它返回None,在類定義時有時寫__init__()方法,有時不寫,只有當我們需要對一個對象進行初始化操作時,纔會重寫__init__()方法。

>>> class Rectangle:
        def __init__(self,x,y):        #默認是沒有參數的,但這裏需要傳入兩個參數,即需求,所以重寫了__init__方法
            self.x = x
            self.y = y
        def area(self):
            return self.x * self.y

>>> rect = Rectangle(2,3)
>>> rect.area()
6

下面介紹另一個初始化的魔法方法,實際上,下面這個魔法方法纔是創建對象時第一個要調用的方法:
__new__(cls[, ...]): 是對象實例化的時候所調用的第一個方法,它第一個參數是 class ,後面有其他參數時,會原封不動的傳給__init__()方法,很少被重寫。
1)需要一個實例對象作爲返回值;
2)當繼承一個不可變類型,又需要進行修改的時候,重寫

>>> class SortedList(list):           #繼承列表,list是不可修改的
        def __new__(cls, list1):      #傳入一個列表list1
            list1 = list.sort(list1)  #調用列表的內置方法sort(),把list1重寫之後,讓list調用
            return list.__new__(cls,list1)     #返回一個實例對象

>>> l = SortedList([3,4,2,8,6,10,3,5])
>>> l                                 #重寫之後,直接調用就可以得到排序之後的列表
[2, 3, 3, 4, 5, 6, 8, 10]

最後再介紹一下Python中的析構器:
__del__(self) : 析構器,對象生成之後,當所有對它的引用都被 del 之後,會啓動垃圾回收機制,當垃圾回收機制銷燬對象的時候,就會調用這個方法。

>>> class Test:
        def __init__(self):
            print(' I am __init__ method, I am being called...')
        def __del__(self):
            print(' I am __del__ method, I am being called...')

>>> c1 = C()                         #生成一個實例化對象c1,調用了__init__()方法
 I am __init__ method, I am being called...
>>> c2 = c1                          #c2也指向c1這個對象的內存
>>> c3 = c2                          #c3也指向c1這個對象的內存,即此時有3個名字指向同一塊內存區域
>>> del c3
>>> del c2
>>> del c1                           #刪除出c3、c2、c1之後,沒有名字再指向這個內存了,所以就自動調用了__del__魔法方法來銷燬這個對象
 I am __del__ method, I am being called...

零基礎入門學習Python(20)對象(5)類和對象的內置函數

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