Python構(gòu)造函數(shù)及解構(gòu)函數(shù)介紹
python 有一個(gè)相應(yīng)的特殊解構(gòu)器(destructor)方法名為_(kāi)_del__()。然而,由于python具有垃圾對(duì)象回收機(jī)制(靠引用計(jì)數(shù)),這個(gè)函數(shù)要直到該實(shí)例對(duì)象所有的引用都被清除掉后才會(huì)被執(zhí)行。python中的解構(gòu)器是在實(shí)例釋放前提供特殊處理功能方法,它們通常沒(méi)有被實(shí)現(xiàn),因?yàn)閷?shí)例很少被顯式釋放。
在下面的例子中,我們分別創(chuàng)建(并覆蓋) __init__()和__del__()構(gòu)造器及解構(gòu)函數(shù),然后,初始化類(lèi)并給同樣的對(duì)象很多別名。id()內(nèi)建函數(shù)可用來(lái)確定引用同一對(duì)象的三個(gè)別名。最后一步是使用del語(yǔ)句清除所有的別名,顯示何時(shí)調(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沒(méi)有提供任何內(nèi)部機(jī)制來(lái)跟跟蹤一個(gè)類(lèi)有多少個(gè)實(shí)例被創(chuàng)建了,或者記錄這些實(shí)例是什么東西。如果需要這些功能,可以顯式加入一些代碼到類(lèi)定義或者_(dá)_init__()和__del__()中去。最好的方式是使用一個(gè)靜態(tài)成員來(lái)記錄實(shí)例的個(gè)數(shù)??勘4嫠鼈兊囊脕?lái)跟蹤實(shí)例對(duì)象是很危險(xiǎn)的,因?yàn)槟惚仨毢侠砉芾磉@些引用,不然你的引用可能沒(méi)辦法釋放(因?yàn)檫€有其他的引用)!看下面的例子:
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)用父類(lèi)構(gòu)造函數(shù)的麻煩
- 淺談Python類(lèi)里的__init__方法函數(shù),Python類(lèi)的構(gòu)造函數(shù)
- Python中type的構(gòu)造函數(shù)參數(shù)含義說(shuō)明
- Python 含參構(gòu)造函數(shù)實(shí)例詳解
- Python子類(lèi)繼承父類(lèi)構(gòu)造函數(shù)詳解
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)OOP深入分析【構(gòu)造函數(shù),組合類(lèi),工具類(lèi)等】
- Python面向?qū)ο笏枷肱c應(yīng)用入門(mén)教程【類(lèi)與對(duì)象】
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)多繼承和多態(tài)用法示例
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之私有屬性及私有方法示例
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)構(gòu)造函數(shù)和析構(gòu)函數(shù)用法分析
相關(guān)文章
Python中l(wèi)ambda表達(dá)式的用法示例小結(jié)
本文主要展示了一些lambda表達(dá)式的使用示例,通過(guò)這些示例,我們可以了解到lambda表達(dá)式的常用語(yǔ)法以及使用的場(chǎng)景,感興趣的朋友跟隨小編一起看看吧2024-04-04
使用python進(jìn)行時(shí)間序列預(yù)測(cè)的流程
使用 Python 進(jìn)行時(shí)間序列預(yù)測(cè)是一個(gè)非常常見(jiàn)的任務(wù),可以應(yīng)用于各種領(lǐng)域,時(shí)間序列預(yù)測(cè)的方法有很多,包括統(tǒng)計(jì)方法、機(jī)器學(xué)習(xí)方法、以及深度學(xué)習(xí)方法,下面是一個(gè)簡(jiǎn)單的時(shí)間序列預(yù)測(cè)流程示例,需要的朋友可以參考下2024-09-09
探索Python int()函數(shù)傳入中文或者字符串會(huì)發(fā)生什么
這篇文章主要為大家介紹了Python int()函數(shù)傳入中文或者字符串會(huì)發(fā)生什么,詳細(xì)討論int()函數(shù)的常規(guī)使用以及它如何處理異常輸入,特別是涉及字符串和中文字符的情況2024-01-01
淺談numpy中l(wèi)inspace的用法 (等差數(shù)列創(chuàng)建函數(shù))
下面小編就為大家?guī)?lái)一篇淺談numpy中l(wèi)inspace的用法 (等差數(shù)列創(chuàng)建函數(shù))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
Matplotlib可視化之添加讓統(tǒng)計(jì)圖變得簡(jiǎn)單易懂的注釋
今天給大家?guī)?lái)的文章是關(guān)于Python的,文章圍繞著Python Matplotlib可視化展開(kāi),文中非常詳細(xì)的介紹了如何給統(tǒng)計(jì)圖添加注釋,需要的朋友可以參考下2021-06-06

