程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python魔法方法(3):__del __(self) 方法

編輯:Python

Python 的對象天生擁有一些神奇的方法,它們總被雙下劃線所包圍,它們是面向對象的 Python 的一切。它們是可以給你的類增加魔力的特殊方法,如果你的對象實現(重載)了某一個魔法方法,那麼這個方法就會在特殊的情況下自動被 Python 所調用。

功能

析構器,定義對象在內存中被釋放時的行為。

參數

self 代表對象本身,也可以有其他參數。

應用場景

Python自帶垃圾回收機制,但它只能回收用戶級資源,而不能自動回收系統資源。故當一個對象同時擁有用戶級(Python程序)與內核級(系統)兩種資源時,就必須在清除對象的同時回收系統資源(如關閉文件等),這就用到了__del__方法。

__del__方法是當對象被系統回收的時候調用的魔法方法,在對象生命周期調用結束時調用該方法。

Python 采用自動引用計數(ARC)方式來回收對象所占用的空間,當程序中有一個變量引用該 Python 對象時,Python 會自動保證該對象引用計數為 1;當程序中有兩個變量引用該 Python 對象時,Python 會自動保證該對象引用計數為 2,依此類推,如果一個對象的引用計數變成了 0,則說明程序中不再有變量引用該對象,表明程序不再需要該對象,因此 Python 就會回收該對象。所以大部分時候,都不需要我們手動去刪掉不再使用的對象,python的回收機制會自動幫我們做這件事。

示例代碼:

class A(object):
def __init__(self, a):
print('this is A init')
self.a = a
def __del__(self):
print('this is magic method del')
m = A(1)

運行結果:

this is A init
this is magic method del
class MyText(object):
def __init__(self, file_name):
self.file_name = file_name
def __del__(self):
self.file_name.close()
del self.file_name
print('我被回收了哦')
sample = MyText(open('b.txt', 'a'))
print('1234', file=sample.file_name)
sample1 = sample
del sample
print('----------')

執行結果:

----------
我被回收了哦

1、並不是對一個變量執行 del 操作,該變量所引用的對象就會被回收,只有當對象的引用計數變成 0 時,該對象才會被回收。
 2、如果父類提供了 __del__方法,則子類重寫 __del__方法時必須顯式調用父類的 __del__方法,這樣才能保證合理地回收父類實例的部分屬性。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved