Python07_用類實現抽象和封裝課件_第1頁
Python07_用類實現抽象和封裝課件_第2頁
Python07_用類實現抽象和封裝課件_第3頁
Python07_用類實現抽象和封裝課件_第4頁
Python07_用類實現抽象和封裝課件_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、7 用類實現抽象和封裝第7章 面向對象程序設計本章內容面向對象程序設計概述創建類與對象構造方法和析構方法類的繼承類的多態運算符重載面向對象程序設計的應用比程序或函數更高層次的封裝是面向對象程序設計,不僅封裝了代碼,也封裝了操作的數據。面向對象使得軟件開發更加靈活,更適用于大型軟件的設計與開發。7.1 面向對象編程概述面向對象程序設計的概念1.面向對象程序設計面向對象(OO)是符合人類思維習慣的編程思想。基于面向對象思想的程序設計方法被稱為面向對象的程序設計(Object Oriented Programming)。2. 與面向過程程序設計的比較把解決的問題按照一定規則劃分為多個獨立的對象,然后

2、通過調用對象的方法來實現多個對象相互配合,完成應用程序功能。3. 對象和類對象(Object)將描述事物的一組數據和與這組數據有關操作封裝在一起,形成一個實體,就是對象。具有相同或相似性質的對象的抽象就是類(Class)。7.1 面向對象編程概述面向對象程序設計的特點1. 封裝性將數據和對數據的操作組織在一起,定義一個新類的過程就是封裝(Encapsulation)。2. 繼承性繼承(Inheritance)描述了類之間的關系。繼承的類(子類)可以對被繼承的類(父類)的操作進行擴展或重定義。3. 多態性多態(Polymarphism)指類中的方法重載,即一個類中有多個同名(不同參數)的方法,方

3、法調用時,根據不同的參數選擇執行不同的方法。本章圍繞封裝、繼承、多態講解Python的面向對象程序設計。7.2 創建類與對象創建類面向對象的核心的是對象,創建對象之前先需要定義一個類。類是對象的抽象,用于描述一組對象的共同特征和行為。對象的特征(屬性),用成員變量于描述,對象的行為(方法)用成員方法描述。使用 class關鍵字來聲明一個類。class 類名: 類的屬性(成員變量) 類的方法(成員方法) 7.2 創建類與對象創建類類由3部分組成。 類名:類的名稱,通常它的的首字母大寫。 屬性:用于描述事物的特征,比如人有姓名、年齡等。 方法:用于描述事物的行為,比如,人有說話,微笑等行為。例7-

4、1 創建類的示例。7.2 創建類與對象創建對象根據類創建對象。Python使用如下語法來創建一個對象。對象名=類名()例如,創建Dog類的一個對象dog。dog = Dog()dog實際上是一個變量,可以使用它來訪問類的屬性和方法。可以給對象添加屬性,格式如下:對象名.屬性名值例7-2 創建對象示例。7.3 構造方法和析構方法兩個比較特殊的方法:_init_()和_del_(),分別用于初始化對象和釋放對象所占用的資源。構造方法類中名字為_init_()的方法(以兩個下畫線“_”開頭和結尾)被稱為構造方法。用于完成對象數據成員設置初值或進行其他必要的初始化工作。如果未定義構造方法,Python

5、將提供一個默認的構造方法。例7-3 使用無參數的構造方法創建對象。例7-4 使得帶參數的 _init_()方法的構造對象。7.3 構造方法和析構方法析構方法Python中的_del_()方法是析構方法,與構造方法相反,用來釋放對象占用的資源源。如果用戶未定義析構方法,Python將提供一個默認的析構方法進行必要的清理工作。例7-5 使用析構方法刪除對象。7.3 構造方法和析構方法self參數成員方法的第1個參數是 self。self的意思是自己,表示的是對象自身,當某個對象調用成員方法的時候,Python解釋器會自動把當前對象作為第1個參數傳給self,用戶只需要傳遞后面的參數就可以了。成員方

6、法的第1個參數通常命名為self,但使用其他參數名也是合法的。例7-6 self參數的使用。7.3 構造方法和析構方法成員變量和類變量類中的變量分為兩種類型:一種是成員變量,另一種是類變量。成員變量是在構造方法_init_()中定義的,定義時以self作為第1個參數;類變量是在類中方法之外定義的。在類的的外部,成員變量屬于實例(對象),只能通過對象名訪問;類變量屬于類,可以通過類名訪問,也可以通過對象名訪問,被類的所有對象共享。例7-7 定義含有成員變量(名字name、顏色color)和類變量(數量num)的 Animal類。7.3 構造方法和析構方法類方法和靜態方法類中有以下4種方法:成員方

7、法、普通方法、類方法、靜態方法。成員方法由對象調用,方法的第1個參數默認是self,構造方法和析構方法也屬于成員方法;普通的方法即類中的函數,只能由類名調用;類方法和靜態方法都屬于類的方法。7.3 構造方法和析構方法類方法和靜態方法1類方法使用修飾器classmethod來標識類方法。class 類名: classmethod def 類方法名(cls): 方法體格式中,類方法的第1個參數為cls,代表定義類方法的類,通過cls參數可以訪問類的屬性既可以通過對象名調用類方法,又可以通過類名調用類方法例7-8 類中定義的實例方法和類方法。例7-9 類方法的應用。7.3 構造方法和析構方法類方法和

8、靜態方法2.靜態方法使用修飾器staticmethod來標識靜態方法。class 類名: staticmethod def 靜態方法名(): 方法體靜態方法的參數列表中沒有任何參數。由于靜態方法沒有self參數,所以它無法訪問類的實例屬性;靜態方法也沒有cls參數,所以它也無法訪問類屬性。靜態方法跟定義它的類沒有直接的關系,只是起到類似于函數的作用。7.4 類的繼承繼承的實現類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出來的新類稱作子類,被繼承的類稱作父類,子類會自動擁有父類所有可繼承的屬性和方法。class 子類名(父類名): 類的屬性 類的方法例7-11 類的繼承示例,子類繼承父

9、類的方法。以兩個下劃線“_”開頭的屬性是私有屬性,只在類的內部訪問。以兩個下劃線“_”開頭的方法是私有方法,只在類的內部訪問。7.4 類的繼承方法重寫在繼承關系中,子類會自動擁有父類定義的方法。如果父類的方法不能滿足子類的需求,子類可以按照自己的方式重新實現從父類中繼承的方法,這就是方法的重寫。重寫使得子類中的方法覆蓋掉跟父類同名的方法,但需要注意,在子類中重寫的方法要和父類被重寫的方法具有相同的方法名和參數列表。例7-13 子類重寫父類的方法。super()方法用于在繼承過程中訪問父類的成員。7.4 類的繼承Python的多繼承一個子類存在多個父類的現象稱為多繼承。Python語言支持多繼承

10、,一個子類同時擁有多個父類的共同特征,即子類繼承了多個父類的方法和屬性。多繼承是在子類名稱后的括號中標注出要繼承的多個父類,并且多個父類之間使用逗號分隔。class 子類(父類): 屬性描述 方法描述例7-14 多繼承示例。7.5 類的多態在同一個方法中,這種由于參數不同而導致執行效果各異的現象就是多態。在Java或C等強類型語言中,多態是指允許使用一個父類類型的變量來引用一個子類類型的對象來實現的。即根據引用子類對象特征的不同,得到不同的運行結果。Python的多態并不考慮對象的類型,而是關注對象具有的行為,根據被引用子類對象特征的不同,得到不同的運行結果。Python的多態并不要求繼承的存

11、在。但繼承關系的存在,對多態起到約束作用,可以使程序更為健狀。7.6 運算符重載運算符重載將運算符與類的方法關聯起來,每個運算符對應一個指定的內置方法。Python支持運算符重載功能,可以重載加減乘除等運算,也可以重載打印、索引、比較等內置運算,重載方法如下表。方法名運算符調用方式_add_x+y,x+=y_sub_x-y,x-=y_div_x/y,x/=y_mul_x*y,x*-=y_mod_x%y,x%=y_repr_或_str_print(x)、repr(x)、str()_getitem_xkey,xi:j_setitem_xkey,xi:j=sequence_delitem_del x

12、key,del xi:j_eq_, _ne_x=y,x!=y_lt_,_le_xy,xy,x=運算符。例7-17 _str_()方法重載和_ge_()方法重載的實現。7.6 運算符重載3. 索引和切片重載跟索引和切片相關的重載方法包括如下3個。(1)_getitem_()方法用于索引、切片操作,在對象執行索引、切片或者for迭代操作時,會自動調用該方法。(2)_setitem_()方法索引賦值,在通過賦值語句給索引或者切片賦值時,調用 _setitem_()方法實現對序列對象的修改。(3)_ delitem_()方法使用del關鍵字刪除對象時,調用_ delitem_()方法實現刪除。例7-1

13、8中,重寫了_getitem_()方法、_setitem_()方法、_ delitem_()方法,實現對屬性的索引、切片和刪除操作。7.7 面向對象程序設計的應用學生信息管理程序下面的程序實現學生信息的遍歷、追加、修改、刪除和排序等功能,程序由3部分組成。 學生類Student,成員變量有id(序號),name(姓名),course(課程),重載了_repr_()方法。 學生的集合類StuList,承載多名學生信息。重載了索引和切片的方法。 主控程序。小結面向對象程序設計中,類中的_init_()方法被稱為構造方法,_del_()方法是析構方法。類中的屬性也叫成員變量,分為兩種類型:一種是實例屬性,另一種是類屬性。實例屬性是在構造方法_init_()中定義的;類屬性是在類中方法之外定義的屬性。類中的方法分為成員方法、普通方法、類方法、靜態方法。類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出來的新類稱作子類,被繼承的類稱作父類,子類會自動擁有父類所有可繼承的屬性和方法。一個子類存在多個父關的現象稱為多繼承。運算符重載指的是將運算符與類的方法關聯起來,每個運算符對應一個內

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論