天天看點

python 構造函數 析構函數

結果:

python 構造函數 析構函數

上面是python  li2.py運作結果

如果在IDLE中直接F5運作結果如下:

================ RESTART: D:/ADB/kuaidou0102/kuaidou1210/li2.py ================

這是構造函數

hell, bigberg

>>>

以上兩個結果不同,原因是在IDLE中程式是運作結束了,但執行個體化的對象object仍然存在,仍可以使用,繼續操作如下:

>>> obj

<__main__.Test object at 0x0000000002F49E88>

說明該對象是存在的,是以沒有執行析構函數的功能

隻有執行了:del  obj才自動執行析構函數,是以在IDLE中将最後一行的#去掉,才會顯示如下結果:

這是析構函數

總結 :

1.構造函數是類執行個體化時自動執行的函數,一般用來執行初始化操作

2.析構函數是執行個體化删除後自動執行的函數,一般用來清除在執行個體化所用的變量等,用以釋放記憶體,供計算機新運作的程式使用

 析構函數是為你的類建立的對象處理後事用的,是以它的調用時機就類建立出來的對象的生命周期結束的時候。

Python中,構造函數<code>(constructor)</code>和析構函數<code>(destructor)</code>同為類中預設存在的無初始内容函數(可寫入内容),且都在會在對對象執行操作時調用。

不同的是構造函數在<code>建立對象後</code>自動被調用,而析構函數在<code>對象被銷毀前</code>(作為垃圾被收集)自動被調用。兩者有異曲同工之妙。

可以說構造函數和析構函數就相當于兩個哨兵,建立對象時,構造函數告訴計算機,我要申請執行個體化對象所需的記憶體,銷毀對象時,析構函數告訴計算機,這些記憶體可以被回收并釋放了。

在執行個體化類時,必須寫上且寫全構造函數中的參數(不包括self),以次來進行屬性的初始化。

構造函數可以利用參數清單進行初始化對象屬性,但是析構函數隻能有一個預設的self參數,不能自定義其他參數。

構造函數和析構函數是自動調用的,但是也可以主動調用:使用className.__init__()。

析構函數一般無需寫入内容,因為Python有垃圾回收機制,不需要手動釋放。