首先,先看一下del內(nèi)置方法:
class CLanguage:
def __init__(self):
print("調(diào)用 __init__() 方法構(gòu)造對象")
def __del__(self):
print("調(diào)用__del__() 銷毀對象,釋放其空間")
clangs = CLanguage()
#添加一個引用clangs對象的實例對象
cl = clangs
del clangs
print("***********")
程序運行結(jié)果為:
調(diào)用 __init__() 方法構(gòu)造對象
***********
調(diào)用__del__() 銷毀對象,釋放其空間
可以看到,當(dāng)程序中有其它變量(比如這里的 cl)引用該實例對象時,即便手動調(diào)用 del() 方法,該方法也不會立即執(zhí)行。這和 Python 的垃圾回收機(jī)制的實現(xiàn)有關(guān)。
Python 采用自動引用計數(shù)(簡稱 ARC)的方式實現(xiàn)垃圾回收機(jī)制。該方法的核心思想是:每個 Python 對象都會配置一個計數(shù)器,初始 Python 實例對象的計數(shù)器值都為 0,如果有變量引用該實例對象,其計數(shù)器的值會加 1,依次類推;反之,每當(dāng)一個變量取消對該實例對象的引用,計數(shù)器會減 1。如果一個 Python 對象的的計數(shù)器值為 0,則表明沒有變量引用該 Python 對象,即證明程序不再需要它,此時 Python 就會自動調(diào)用 del() 方法將其回收
再看一下 call()內(nèi)置方法
該方法的功能類似于在類中重載 () 運算符,使得類實例對象可以像調(diào)用普通函數(shù)那樣,以“對象名()”的形式使用。
class CLanguage:
# 定義__call__方法
def __call__(self,name,add):
print("調(diào)用__call__()方法",name,add)
clangs = CLanguage()
clangs("C語言中文網(wǎng)","http://c.biancheng.net")
程序執(zhí)行結(jié)果為:
調(diào)用__call__()方法 C語言中文網(wǎng) http://c.biancheng.net
可以看到,通過在 CLanguage 類中實現(xiàn) call() 方法,使的 clangs 實例對象變?yōu)榱丝烧{(diào)用對象。
也可以這樣使用
clangs.call("C語言中文網(wǎng)","http://c.biancheng.net")
總結(jié)一下:如果你想把類當(dāng)成一種函數(shù),就可以定義一下這個內(nèi)置的函數(shù)
==================================================
后面的知識,后面再說吧,因為知識總是說不完,慢慢的補(bǔ)充吧