面向對象高階-06\_\_del\_\_

__del__

__del__也稱之爲析構方法
__del__會在對象被刪除以前自動觸發
執行時機: 手動刪除對象時立馬執行,或是程序運行結束時也會自動執行
上例子
列子一python

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.f = open(da, 'w', encoding='utf-8')

    def __del__(self):
        print('run======>')
        # 作回收系統資源相關的事情
        self.f.close()


obj = People('egon', 18)
del obj  # del obj會間接刪除f的內存佔用,可是還須要自定製__del__刪除文件的系統佔用
print('apan')

run=-====>
apan
列子二數據庫

class FileTool:
    """該類用於簡化文件的讀寫操做 """

    def __init__(self,path):
        self.file = open(path,"rt",encoding="utf-8")
        self.a = 100

    def read(self):
        return self.file.read()

    # 在這裏能夠肯定一個事,這個對象確定不使用了 因此能夠放心的關閉問文件了
    def __del__(self):
        self.file.close()

tool = FileTool("a.txt")
print(tool.read())

典型的應用場景:操作系統

建立數據庫類,用該類實例化出數據庫連接對象,對象自己是存放於用戶空間內存中,而連接則是由操做系統管理的,存放於內核空間內存中code

當程序結束時,python只會回收本身的內存空間,即用戶態內存,而操做系統的資源則沒有被回收,這就須要咱們定製__del__,在對象被刪除前向操做系統發起關閉數據庫連接的系統調用,回收資源對象

這與文件處理是一個道理:內存

f=open('a.txt') #作了兩件事,在用戶空間拿到一個f變量,在操做系統內核空間打開一個文件
del f #只回收用戶空間的f,操做系統的文件還處於打開狀態

#因此咱們應該在del f以前保證f.close()執行,即使是沒有del,程序執行完畢也會自動del清理資源,因而文件操做的正確用法應該是
f=open('a.txt')
讀寫...
f.close()
不少狀況下你們都容易忽略f.close,這就用到了with上下文管理
相關文章
相關標籤/搜索