最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?中的對象析構函數(shù)__del__?詳情

 更新時間:2022年03月22日 11:43:01   作者:宇宙之一粟  
這篇文章主要介紹了Python?中的對象析構函數(shù)del詳情,Python?中的類的構造函數(shù)???__init__???,?每當實例產生就會調用這個構造函下面更多相關內容,需要的小伙伴可以參考一下

前言:

Python 中的類的構造函數(shù) ??__init__?? , 每當實例產生就會調用這個構造函數(shù)。

反過來,每當實例對象需要被垃圾收集被收回時,就需要用到析構函數(shù) ??__del__?? 。

??__del__?? 方法是類的一種特殊方法??梢岳???__del__?? 方法來清理資源,例如關閉文件。

來看一個例子:

class Life:

? ? def __init__(self, name='None'):
? ? ? ? print('Hello,' + name)
? ? ? ? self.name = name

? ? def live(self):
? ? ? ? print(self.name)
? ??
? ? def __del__(self):
? ? ? ? print("Goodbye," + self.name)

def main():

? ? bob = Life('Bob')
? ? bob.live()

if __name__ == '__main__':
? ? main()

運行該代碼,輸出結果為:

Hello,Bob
Bob
Goodbye,Bob

我們得到上面的輸出是因為當代碼即將結束時,不再需要類 Life,因此它已準備好被銷毀。 在類 Life 被銷毀之前,會自動調用 ??__del__?? 方法。

還可以通過調用 ??del?? 手動調用 ??__del__?? 方法:

class Life:

? ? def __init__(self, name='None'):
? ? ? ? print('Hello,' + name)
? ? ? ? self.name = name

? ? def live(self):
? ? ? ? print(self.name)
? ??
? ? def __del__(self):
? ? ? ? print("Goodbye," + self.name)

def main():

? ? bob = Life('Bob')
? ? del bob

if __name__ == '__main__':
? ? main()

執(zhí)行結果:

Hello,Bob
Goodbye,Bob

值得注意的是:??del x?? 并不直接調用 ??x.__del__()?? ,前者將 x 的引用計數(shù)減一,而后者僅在其引用計數(shù)達到零時才被調用。

在 Python 中,任何未使用的對象(如內置類型或類的實例)在不再使用時會自動從內存中刪除(移除)。 這種釋放和回收未使用內存空間的過程稱為垃圾回收。

在Python中何時使用__del__?

重要的是要注意,當對象處于銷毀的過程中,調用 ??__del__?? 方法(未損壞后),因此仍然可以在__del__方法中訪問屬性。

由于??__del__?? 可以訪問對象的數(shù)據成員,因此應該確保對象的填充刪除,以便沒有內存泄露。

class App:
? ? def __init__(self):
? ? ? ? print("Open App")

? ? def __del__(self):
? ? ? ? print("Closed App")

class Phone:
? ? app = None

? ? def __init__(self):
? ? ? ? print("Switching on the Phone")
? ? ? ? self.__class__.app = App()

? ? def __del__(self):
? ? ? ? del self.__class__.app
? ? ? ? print("Switching off the Phone")

phone = Phone()

del phone

執(zhí)行結果:

Switching on the Phone
Open App
Closed App
Switching off the Phone

在這個例子中,如果我們沒有在??__del__?? 方法中銷毀手機的屬性 app,它就會留在內存中,導致內存泄漏。

析構函數(shù)使用緊要

Python 中的析構函數(shù)并不像 C++ 中那樣被頻繁使用,因為它存在一些眾所周知的警告和極少數(shù)鮮為人知的暗坑。

盡量減少使用 ??__del__?? 函數(shù):

  • 第一,因為 Python 在回收實例時,會自動回收該實例擁有的所有內存空間,所以析構函數(shù)并不需要考慮空間管理。所以也就失去了手動寫 ??__del__?? 的意義。
  • 第二,無法預測一個實例什么時候會被回收。有時候你想觸發(fā)析構函數(shù)時,系統(tǒng)表中對對象的引用會阻止析構函數(shù)的執(zhí)行。Python 也無法保證解釋器退出時,一個仍然存在的對象會調用其析構函數(shù)。
  • 第三,??__del__?? 可能會引發(fā)的異常會直接向 sys.stderr(標準錯誤流) 打印一條警告消息,而不是觸發(fā)一個異常事件。因為它通過垃圾收集器運行在不可預料的上下文中。
  • 第四,當我們期待垃圾回收時,對象間的循環(huán)引用可能會阻止其發(fā)生。

總結:

  • 當對象被銷毀時,Python 會自動調用對象上的 ??__del__?? 方法(??類似于在對象創(chuàng)建期間調用的 ??__init__?? 構造函數(shù))。
  • ??__del__?? 方法類似于 C++ 和 Java 中的析構函數(shù)。用于銷毀對象的狀態(tài)。
  • Python 中,盡量減少析構函數(shù)的使用。

到此這篇關于Python 中的對象析構函數(shù)__del__ 詳情的文章就介紹到這了,更多相關Python 對象析構函數(shù)del內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python關閉print輸出信息詳情

    python關閉print輸出信息詳情

    這篇文章主要介紹了python關閉print輸出信息詳情,當我們遇到需要關閉print輸出信息的情況,我們可以通過控制sys.stdout來實現(xiàn)print輸出的開關,下面文章就用一個簡單的例子來實現(xiàn),需要的小伙伴可以參考一下
    2022-02-02
  • Python?中的對象析構函數(shù)__del__?詳情

    Python?中的對象析構函數(shù)__del__?詳情

    這篇文章主要介紹了Python?中的對象析構函數(shù)del詳情,Python?中的類的構造函數(shù)???__init__???,?每當實例產生就會調用這個構造函下面更多相關內容,需要的小伙伴可以參考一下
    2022-03-03
  • python腳本實現(xiàn)數(shù)據導出excel格式的簡單方法(推薦)

    python腳本實現(xiàn)數(shù)據導出excel格式的簡單方法(推薦)

    下面小編就為大家?guī)硪黄猵ython腳本實現(xiàn)數(shù)據導出Excel格式的簡單方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • python遍歷小寫英文字母的方法

    python遍歷小寫英文字母的方法

    今天小編就為大家分享一篇python遍歷小寫英文字母的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Pandas爆炸函數(shù)的使用技巧

    Pandas爆炸函數(shù)的使用技巧

    同事舉了個簡單的例子來說明爆炸函數(shù)的功能,我當場就記下了這個函數(shù)名稱:爆炸函數(shù)。Hive在我的工作中使用的并不多,于是我在想:Pandas能夠實現(xiàn)這個功能嗎?本文就來了解一下
    2021-05-05
  • python中使用mysql數(shù)據庫詳細介紹

    python中使用mysql數(shù)據庫詳細介紹

    這篇文章主要介紹了python中使用mysql數(shù)據庫詳細介紹,本文起講解了安裝mysql、安裝MySQL-python、mysql 的基本操作、python 操作mysql數(shù)據庫基礎等內容,需要的朋友可以參考下
    2015-03-03
  • python實現(xiàn)翻轉棋游戲(othello)

    python實現(xiàn)翻轉棋游戲(othello)

    這篇文章主要為大家詳細介紹了python實現(xiàn)翻轉棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python開發(fā)飛機大戰(zhàn)游戲

    python開發(fā)飛機大戰(zhàn)游戲

    這篇文章主要為大家詳細介紹了python開發(fā)飛機大戰(zhàn)游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Python動力系統(tǒng)驗證三體人是否真的存在

    Python動力系統(tǒng)驗證三體人是否真的存在

    這篇文章主要介紹了Python動力系統(tǒng)驗證三體人是否真的存在,文中含有詳細的圖文示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 詳解OpenMV圖像處理的基本方法

    詳解OpenMV圖像處理的基本方法

    這篇文章主要介紹了OpenMV圖像處理的基本方法,包括感光元件的相關知識介紹,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2021-11-11

最新評論

扬中市| 东山县| 吕梁市| 铁力市| 钦州市| 平乐县| 渭源县| 惠安县| 双牌县| 祥云县| 冷水江市| 牙克石市| 迁安市| 西藏| 碌曲县| 皋兰县| 财经| 杂多县| 隆安县| 新邵县| 常州市| 吕梁市| 松潘县| 库伦旗| 庆元县| 胶州市| 突泉县| 澄迈县| 治县。| 怀仁县| 株洲县| 普洱| 孝感市| 永修县| 临桂县| 深泽县| 恩施市| 罗甸县| 棋牌| 平度市| 阳西县|