Python構(gòu)造函數(shù)及解構(gòu)函數(shù)介紹
python 有一個相應(yīng)的特殊解構(gòu)器(destructor)方法名為__del__()。然而,由于python具有垃圾對象回收機制(靠引用計數(shù)),這個函數(shù)要直到該實例對象所有的引用都被清除掉后才會被執(zhí)行。python中的解構(gòu)器是在實例釋放前提供特殊處理功能方法,它們通常沒有被實現(xiàn),因為實例很少被顯式釋放。
在下面的例子中,我們分別創(chuàng)建(并覆蓋) __init__()和__del__()構(gòu)造器及解構(gòu)函數(shù),然后,初始化類并給同樣的對象很多別名。id()內(nèi)建函數(shù)可用來確定引用同一對象的三個別名。最后一步是使用del語句清除所有的別名,顯示何時調(diào)用了多少次解構(gòu)器。
#!/usr/bin/env python
#coding=utf-8
class P():
def __del__(self):
pass
class C(P):
def __init__(self):
print 'initialized'
def __del__(self):
P.__del__(self)
print 'deleted'
c1 = C()
c2 = c1
c3 = c1
print id(c1), id(c2), id(c3)
del c1
del c2
del c3
python沒有提供任何內(nèi)部機制來跟跟蹤一個類有多少個實例被創(chuàng)建了,或者記錄這些實例是什么東西。如果需要這些功能,可以顯式加入一些代碼到類定義或者_(dá)_init__()和__del__()中去。最好的方式是使用一個靜態(tài)成員來記錄實例的個數(shù)??勘4嫠鼈兊囊脕砀檶嵗龑ο笫呛芪kU的,因為你必須合理管理這些引用,不然你的引用可能沒辦法釋放(因為還有其他的引用)!看下面的例子:
class InstCt(object):
count = 0
def __init__(self):
InstCt.count += 1
def __del__(self):
InstCt.count -= 1
def howMany(self):
return InstCt.count
a = InstCt()
b = InstCt()
print b.howMany()
print a.howMany()
del b
print a.howMany()
del a
print InstCt.count
所有輸出:
initialized
4372150104 4372150104 4372150104
deleted
********************
2
2
1
0
- 巧用Python裝飾器 免去調(diào)用父類構(gòu)造函數(shù)的麻煩
- 淺談Python類里的__init__方法函數(shù),Python類的構(gòu)造函數(shù)
- Python中type的構(gòu)造函數(shù)參數(shù)含義說明
- Python 含參構(gòu)造函數(shù)實例詳解
- Python子類繼承父類構(gòu)造函數(shù)詳解
- Python面向?qū)ο蟪绦蛟O(shè)計OOP深入分析【構(gòu)造函數(shù),組合類,工具類等】
- Python面向?qū)ο笏枷肱c應(yīng)用入門教程【類與對象】
- Python面向?qū)ο蟪绦蛟O(shè)計多繼承和多態(tài)用法示例
- Python面向?qū)ο蟪绦蛟O(shè)計之私有屬性及私有方法示例
- Python面向?qū)ο蟪绦蛟O(shè)計構(gòu)造函數(shù)和析構(gòu)函數(shù)用法分析
相關(guān)文章
Python----數(shù)據(jù)預(yù)處理代碼實例
這篇文章主要介紹了Python數(shù)據(jù)預(yù)處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03淺談Pytorch torch.optim優(yōu)化器個性化的使用
今天小編就為大家分享一篇淺談Pytorch torch.optim優(yōu)化器個性化的使用,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02使用keras實現(xiàn)BiLSTM+CNN+CRF文字標(biāo)記NER
這篇文章主要介紹了使用keras實現(xiàn)BiLSTM+CNN+CRF文字標(biāo)記NER,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06關(guān)于pytest結(jié)合csv模塊實現(xiàn)csv格式的數(shù)據(jù)驅(qū)動問題
這篇文章主要介紹了pytest結(jié)合csv模塊實現(xiàn)csv格式的數(shù)據(jù)驅(qū)動,使用python中的csv模塊來處理csv文件,結(jié)合pygtest的參數(shù)化處理方式來實現(xiàn)ddt,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-05-05python中強制關(guān)閉線程與協(xié)程與進(jìn)程方法
python使用中多線程、多進(jìn)程、多協(xié)程使用是比較常見的。那么如果在多線程等的使用,我們這個時候我們想從外部強制殺掉該線程請問如何操作?這篇文章帶你介紹,感興趣的同學(xué)可以參考閱讀2023-03-03Django如何簡單快速實現(xiàn)PUT、DELETE方法
這篇文章主要介紹了Django如何簡單快速實現(xiàn)PUT、DELETE方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07