国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Python構(gòu)造方法與析構(gòu)方法的研究

2019-10-09 03:50林觀德
關(guān)鍵詞:鳴笛面向?qū)ο?/a>調(diào)用

林觀德

[摘 ? ? ? ? ? 要] ?Python語言是一種使用非常廣泛的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。構(gòu)造方法和析構(gòu)方法是Python語言面向?qū)ο蟪绦蛟O(shè)計(jì)非常重要的兩個(gè)特殊方法。著重研究構(gòu)造方法和析構(gòu)方法的創(chuàng)建和調(diào)用及構(gòu)造方法和析構(gòu)方法的使用。研究證明:基于Python面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,可以根據(jù)不同的應(yīng)用需求建立適合自己需要的構(gòu)造方法和析構(gòu)方法,這有助于深刻理解類的構(gòu)造方法用于新建對象的初始化工作與析構(gòu)方法用于撤銷對象,完成一些無用數(shù)據(jù)清理的工作。該研究對編程人員具有一定的指導(dǎo)意義。

[關(guān) ? ?鍵 ? 詞] ?Python;構(gòu)造方法;析構(gòu)方法;self

[中圖分類號] ?TP312 ? ? ? ? ? ? ? ? [文獻(xiàn)標(biāo)志碼] ?A ? ? ? ? ? ?[文章編號] ?2096-0603(2019)18-0128-02

一、引言

面向?qū)ο螅∣bject Oriented)是當(dāng)前程序設(shè)計(jì)關(guān)心的主題,它是軟件開發(fā)方法的主流。在實(shí)際應(yīng)用中,面向?qū)ο笫峭ㄟ^類來實(shí)現(xiàn)面向?qū)ο缶幊痰摹J褂妹嫦驅(qū)ο缶幊虝r(shí)需要深刻理解面向?qū)ο蟮娜筇匦裕ǚ庋b、繼承和多態(tài))。這三大特性共同保證了程序的可擴(kuò)展性需求。由于Python語言的簡潔性、易讀性以及可擴(kuò)展性,在國外用Python做科學(xué)計(jì)算的研究機(jī)構(gòu)日益增多,一些知名大學(xué)已經(jīng)采用Python來教授程序設(shè)計(jì)課程。在C語言誕生后,語言的語法含義與字符的排列方式分離開來,曾經(jīng)被認(rèn)為是一種程序語言的進(jìn)步。Python的作者有意地設(shè)計(jì)限制性很強(qiáng)的語法,通過強(qiáng)制程序員縮進(jìn),Python確實(shí)使程序更加清晰和美觀。使不好的編程習(xí)慣都不能通過編譯,因此Python已成為流行的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。本文主要對構(gòu)造方法和析構(gòu)方法的創(chuàng)建和調(diào)用展開研究。

二、構(gòu)造方法與析構(gòu)方法

類似于PHP的構(gòu)造方法和析構(gòu)方法并不需要顯式的定義,實(shí)際上也是存在的。在實(shí)際開發(fā)中,也可以在類中顯式地定義構(gòu)造方法和析構(gòu)方法。這樣就可以在創(chuàng)建實(shí)例對象時(shí),在構(gòu)造方法里添加上代碼完成對象的初始化工作;在對對象銷毀時(shí),在析構(gòu)方法里添加一些代碼釋放對象占用的資源。他們只是在這個(gè)對象生成和銷毀的時(shí)候才會(huì)被調(diào)用。Python提供兩個(gè)非常特殊的方法:構(gòu)造方法__init__()和析構(gòu)方法__del__()。__init__()方法在創(chuàng)建實(shí)例對象的時(shí)候就會(huì)自動(dòng)調(diào)用該方法,__del__()方法在銷毀對象時(shí)就會(huì)自動(dòng)調(diào)用該方法。

(一)構(gòu)造方法的研究

構(gòu)造方法是一種特殊的方法,是在類實(shí)例化為對象的時(shí)候最開始執(zhí)行的方法,主要是用來在創(chuàng)建對象時(shí)初始化對象。創(chuàng)建好對象后,檢查類中是否實(shí)現(xiàn)了構(gòu)造器。如果類中沒有實(shí)現(xiàn)

__init__()方法,就返回新創(chuàng)建的對象,而實(shí)例化操作也就結(jié)束了。如果實(shí)現(xiàn)了__init__()方法,就調(diào)用這個(gè)特殊方法,新創(chuàng)建的實(shí)例將作為它的第一個(gè)參數(shù)self被傳遞進(jìn)去,整個(gè)過程就好像一個(gè)標(biāo)準(zhǔn)方法的調(diào)用一樣,我們就可以把要預(yù)先初始化的屬性放到這個(gè)方法里面。

下列代碼是構(gòu)造方法的典型例子。

class Car: ?#定義類

def __init__(self): ?#構(gòu)造方法

self.color= "黑色"

print("構(gòu)造方法被調(diào)用了")

def tool(self): ? ? ?#鳴笛

print("%s的車在鳴笛…"%(self.color))

car1=Car() ? ?#創(chuàng)建對象

car1.tool() ? ?#調(diào)用tool方法

運(yùn)行上述程序輸出如下結(jié)果:

"構(gòu)造方法被調(diào)用了"

"黑色的車在鳴笛…"

研究結(jié)論:運(yùn)行程序后,輸出“構(gòu)造方法被調(diào)用了”,說明在創(chuàng)建car1對象的過程中調(diào)用了_init__()構(gòu)造方法。給Car類添加了color屬性并賦值為“黑色”,在tool方法中訪問了color屬性的值。

上面研究的是沒有帶有參數(shù)的構(gòu)造方法,下面通過實(shí)例來研究帶有參數(shù)的構(gòu)造方法,其代碼如下:

class Car: ?#定義類

def __init__(self,color): ?#構(gòu)造方法

self.color=color

print("構(gòu)造方法被調(diào)用了")

def tool(self): ? ? ?#鳴笛

print("%s的車在鳴笛…"%(self.color))

car2=Car("紅色") ? ?#創(chuàng)建對象

car2.tool() ? #調(diào)用tool方法

運(yùn)行上述程序輸出如下結(jié)果:

"構(gòu)造方法被調(diào)用了"

"黑色的車在鳴笛…"

研究結(jié)論:運(yùn)行程序后,輸出“構(gòu)造方法被調(diào)用了”,說明在創(chuàng)建car2對象的過程中調(diào)用了_init__()構(gòu)造方法。本程序定義了帶有參數(shù)的構(gòu)造方法,并把參數(shù)值賦color屬性,保證了color屬性的值隨參數(shù)接收到的值而變化,接著仍在tool方法中請問了color屬性的值。

(二)析構(gòu)方法的研究

在__init__()構(gòu)造方法,當(dāng)創(chuàng)建對象時(shí),Python語言解釋器默認(rèn)調(diào)用了__init__()構(gòu)造方法,當(dāng)刪除一個(gè)對象來釋放類所占用資源時(shí),Python語言解釋器默認(rèn)調(diào)用另外一個(gè)__del__(1)析構(gòu)方法。

下列代碼是析構(gòu)方法的典型例子。

class Car: ?#定義類

def__init__(self,name,color): ?#構(gòu)造方法

self.name=name

self.color=color

print(""構(gòu)造方法被調(diào)用了"")

print(self.name,self.color)

def__del__(self): ? ? ? ? ? #析構(gòu)方法

print("析構(gòu)方法被調(diào)用了")

def tool(self): ? ? ?#鳴笛

print("%s%s的車在鳴笛…"%(self.color,self.name))

car3=Car("比來迪","紅色") ? ?#創(chuàng)建對象

car3.tool()#調(diào)用tool方法

運(yùn)行上述程序輸出如下結(jié)果:

"構(gòu)造方法被調(diào)用了"

"比來迪紅色"

"紅色比來迪的車在鳴笛…"

研究結(jié)論:運(yùn)行程序后,輸出“構(gòu)造方法被調(diào)用了”,說明在創(chuàng)建car3對象的過程中調(diào)用了_init__()構(gòu)造方法。本程序定義了帶有參數(shù)的構(gòu)造方法中,設(shè)置了name和color屬性的初始值,在__del__()方法中增加了輸出語句,然后使用了自定義構(gòu)造方法創(chuàng)建了Car類的對象car3。運(yùn)行程序時(shí)輸出上述結(jié)果,從結(jié)果分析,本程序仍沒有調(diào)用析構(gòu)方法。

在上述程序的最后加上刪除對象car3,輸出結(jié)果又如何,其程序代碼如下:

class Car: ?#定義類

def __init__(self,name,color): ?#構(gòu)造方法

self.name=name

self.color=color

print("__init__")

print(self.name,self.color)

def __del__(self): ? ? ? ? ? #析構(gòu)方法

print("析構(gòu)方法被調(diào)用了")

def tool(self): ? ? ? ? ?#鳴笛

print("%s%s的車在鳴笛…"%(self.color,self.name))

car3=Car("比來迪","紅色") ? ?#創(chuàng)建對象

car3.tool()#調(diào)用tool方法

del car3 ? ? ? ? ? ? ? ? ? ?# 刪除對象

運(yùn)行上述程序輸出如下結(jié)果:

"構(gòu)造方法被調(diào)用了"

"比來迪紅色"

"紅色比來迪的車在鳴笛…"

"析構(gòu)方法被調(diào)用了"

研究結(jié)論:運(yùn)行程序后,從結(jié)果分析,“構(gòu)造方法被調(diào)用了”,當(dāng)刪除car3對象時(shí)也調(diào)用了析構(gòu)方法,從而輸出了“析構(gòu)方法被調(diào)用了”。這樣可以用來釋放內(nèi)存空間,對象釋放后就不能再進(jìn)行訪問了。

(三)self的研究

self(相當(dāng)于PHP,Java,C++中的this對象)代表類的實(shí)例對象,而非類本身。類的方法與普通的函數(shù)只有一個(gè)特殊的區(qū)別,在類的方法必須有個(gè)額外的第一個(gè)參數(shù),這個(gè)參數(shù)名稱是self。但在調(diào)用這個(gè)方法的時(shí)候不必為這個(gè)參數(shù)賦值。Python解釋器會(huì)把這個(gè)對象作為第1個(gè)參數(shù)付給self,開發(fā)者只需要傳遞后面的參數(shù)就可以了。self代表當(dāng)前對象的地址。

下面通過一個(gè)案例來研究self使用。

class Car: ?#定義類

def __init__(self,new_color): ?#構(gòu)造方法

self.color=new_color

def print_color(self):

print("顏色為:%s"%self.color)

car_white=Car("白色")

car_white.print_color()

car_black=Car("黑色")

car_black.print_color()

運(yùn)行上術(shù)程序輸出如下結(jié)果:

"顏色為:白色"

"顏色為:黑色"

研究結(jié)論:在本例中定義了一個(gè)Car類,在__init__()方法中,通過參數(shù)設(shè)置color屬性的初值,然后在print_color方法中獲取了color的值。在程序的第6行,創(chuàng)建了一個(gè)Car類的對象car_white,設(shè)置屬性的默認(rèn)值為“白色”,并讓car_white指向了該對象所指的內(nèi)存地址。然后car_white調(diào)用了print_color方法,默認(rèn)會(huì)把car_white引用的內(nèi)在地址賦值給self,這時(shí)self也指向了這塊內(nèi)在地址,執(zhí)行第5行輸出語句會(huì)訪問car_white的color屬性的值,所以程序輸出“白色”。同理,當(dāng)car_black調(diào)用print_color方法,默認(rèn)會(huì)把car_black引用的內(nèi)在地址賦值給self,這時(shí)self也指向了這塊內(nèi)在地址,執(zhí)行第5行輸出語句會(huì)訪問car_black的color屬性的值,所以程序輸出“黑色”。

三、結(jié)語

本文著重研究了Python語言類的定義、類的構(gòu)造方法與析構(gòu)方法相關(guān)概念及其多種的表達(dá)形式,根據(jù)不同的應(yīng)用需求建立適合自己需要的構(gòu)造方法和析構(gòu)方法。繼而進(jìn)一步研究了不同形式的構(gòu)造方法與析構(gòu)方法的使用,并指出顯式的調(diào)用構(gòu)造方法與析構(gòu)方法所帶來的后果。這有助于學(xué)習(xí)者深刻理解Python的構(gòu)造方法與析構(gòu)方法,對學(xué)習(xí)Python語言的編程者提高Python編程能力有很大的參考價(jià)值。

參考文獻(xiàn):

[1]逄菲.基于Python的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,2018(23):25.

[2]狄博,王曉丹.基于Python語言的面向?qū)ο蟪绦蛟O(shè)計(jì)課程教學(xué)[J].計(jì)算機(jī)工程與科學(xué),2014(S1).

[3]王明松,錢靜媛.基于Python語言的面向?qū)ο笳n程實(shí)踐教學(xué)探討[J].電腦知識與技術(shù),2017(4).

[4]謝克武.大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)[J].電子制作,2017(9).

[5]賈棋然.基于Python專用型網(wǎng)絡(luò)爬蟲的設(shè)計(jì)及實(shí)現(xiàn)[J].電腦知識與技術(shù),2017(12).

[6]趙英良.Python程序設(shè)計(jì)[M].北京:人民郵電出版社,2016.

[7]董付國.Python程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2016.

編輯 陳鮮艷

猜你喜歡
鳴笛面向?qū)ο?/a>調(diào)用
庚子清明國祭(二)
基于Android Broadcast的短信安全監(jiān)聽系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)
面向?qū)ο蟮挠?jì)算機(jī)導(dǎo)論課程教學(xué)
基于Web的科研項(xiàng)目管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
應(yīng)力波反射法測錨索長度的數(shù)據(jù)處理軟件設(shè)計(jì)與實(shí)現(xiàn)
從面向過程到面向?qū)ο笏季S方式的教學(xué)引導(dǎo)
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
江山萬里心
C++語言中函數(shù)參數(shù)傳遞方式剖析