第7章-面向對象程序設計_第1頁
第7章-面向對象程序設計_第2頁
第7章-面向對象程序設計_第3頁
第7章-面向對象程序設計_第4頁
第7章-面向對象程序設計_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章面向對象程序設計

學習任務1.掌握如何定義和使用類。2.掌握如何創(chuàng)建類的屬性。3.掌握繼承的基本語法。4.掌握方法重寫。7.1面向對象的概念面向對象程序設計是在面向過程程序設計的基礎上發(fā)展而來的,它比面向過程具有更強的靈活性和擴展性。面向對象程序設計方法是盡可能模擬人類的思維方式,使得軟件的開發(fā)方法與過程盡可能接近人類認識世界、解決現實問題的方法和過程,即使得描述問題的問題空間與問題的解決方案空間在結構上盡可能一致,把客觀世界中的實體抽象為問題域中的對象。7.1面向對象的概念面向對象程序設計以對象為核心,該方法認為程序由一系列對象組成。類是對現實世界的抽象,對象是類的實例化。對象間通過消息傳遞相互通信,來模擬現實世界中不同實體間的聯系。在面向對象程序設計中,對象是組成程序的基本模塊。(1)對象對象(Object)是一個抽象概念,表示任意存在的事物,通常將對象劃分為兩部分:靜態(tài)部分與動態(tài)部分。靜態(tài)部分稱為“屬性”,動態(tài)部分是對象的行為,即對象執(zhí)行的動作。(2)類類(Class)是封裝對象的屬性和行為的載體,反過來講,具有相同屬性和行為的一類實體稱為類。類定義了一件事物的抽象特點。通常來說,類定義了事物的屬性和它的行為。7.1面向對象的概念面向對象程序設計以對象為核心,該方法認為程序由一系列對象組成。類是對現實世界的抽象,對象是類的實例化。對象間通過消息傳遞相互通信,來模擬現實世界中不同實體間的聯系。在面向對象程序設計中,對象是組成程序的基本模塊。(1)對象對象(Object)是一個抽象概念,表示任意存在的事物,通常將對象劃分為兩部分:靜態(tài)部分與動態(tài)部分。靜態(tài)部分稱為“屬性”,動態(tài)部分是對象的行為,即對象執(zhí)行的動作。(2)類類(Class)是封裝對象的屬性和行為的載體,反過來講,具有相同屬性和行為的一類實體稱為類。類定義了一件事物的抽象特點。通常來說,類定義了事物的屬性和它的行為。7.1面向對象的概念(3)面向對象程序設計的基本特征面向對象程序設計具有3個基本特征:封裝、繼承和多態(tài)。封裝(Encapsulation)是面向對象的主要特性。所謂封裝,也就是把客觀事物抽象并封裝成對象,即將數據成員、屬性、方法和事件等集合在一個整體內。繼承(Inheritance)是面向對象程序設計中代碼重用的主要方法。繼承允許使用現有類的功能,并在無須重新改寫原來的類的情況下,對這些功能進行擴展。派生類具有基類所有的非私有數據和方法,以及新類自己定義的所有其他數據或方法,即子類具有兩個有效類型:子類的類型及其繼承的基類的類型。對象可以表示多個類型的能力稱為多態(tài)性(Polymorphism)。7.2類的定義和使用在Python中,類表示具有相同屬性和方法的對象的集合,在使用類時,需要先定義類,然后再創(chuàng)建類的實例,通過類的實例就可以訪問類中的屬性和方法。類的定義使用class關鍵字來實現,具體語法格式如下:參數說明如下:(1)ClassName:用戶指定類名,一般使用“駝峰式命名法”來命名。(2)"""類的幫助信息""":用于指定類的文檔字符串。(3)Statement:類體,定義在類體內的元素都是類的成員。類的主要成員包括兩種類型,即屬性和方法。7.2類的定義和使用在Python中,類表示具有相同屬性和方法的對象的集合,在使用類時,需要先定義類,然后再創(chuàng)建類的實例,通過類的實例就可以訪問類中的屬性和方法。類的定義使用class關鍵字來實現,具體語法格式如下:參數說明如下:(1)ClassName:用戶指定類名,一般使用“駝峰式命名法”來命名。(2)"""類的幫助信息""":用于指定類的文檔字符串。(3)Statement:類體,定義在類體內的元素都是類的成員。類的主要成員包括兩種類型,即屬性和方法。7.2類的定義和使用

class語句本身并不創(chuàng)建該類的任何實例。在類定義完成以后,可以創(chuàng)建類的實例,即實例化該類的對象。創(chuàng)建類的實例的語法格式如下:ClassName是必選參數,用于指定具體的類;paramenterlist是可選參數。7.2類的定義和使用

Python中有一種方法,稱為魔術方法,Python的類里提供的,是以兩個下畫線開始,兩個下畫線結束的方法。魔術方法在恰當的時候就會被激活,自動執(zhí)行。魔術方法具有兩個特點:(1)兩側各有兩條下畫線。(2)魔術方法名字已經由Python官方定義好,不能自定義。7.2類的定義和使用(1)__init__()方法在創(chuàng)建類后,可以手動創(chuàng)建一個__init__()方法。該方法是一個特殊的方法,類似Java中的構造方法。每當創(chuàng)建一個類的新實例時,Python都會自動執(zhí)行該方法。__init__()方法必須包含一個self參數,并且它必須是第一個參數。Self參數是一個指向實例本身的引用,用于訪問類中的屬性和方法。方法調用時會自動傳遞實際參數self。7.2類的定義和使用在__init__()方法中,除了self參數外,還可以自定義一些參數,需要注意的是參數與參數之間要使用逗號“,”進行間隔。7.2類的定義和使用(2)__del__()方法__del__()方法即析構函數(析構方法),用于實現銷毀類的實例所需的操作,如釋放對象占用的非托管資源(如打開的文件、網絡連接等)。默認情況下,當對象不再被使用時,__del__()方法運行。7.2類的定義和使用(3)__str__()方法__str__()方法返回對象的描述信息,使用print()函數打印對象時,其實調用的就是這個對象的__str__()方法。7.2類的定義和使用如果想要修改打印對象的輸出結果,可以重寫__str__()方法。7.2類的定義和使用(4)__repr__()方法__repr__()方法和__str__()方法功能類似,都是用來修改一個對象的默認打印內容。在打印一個對象時,如果沒有重寫__str__()方法,它會自動來查找__repr__()方法。如果這兩個方法都沒有,會直接打印類名和對象的內存地址。7.2類的定義和使用(5)__call__()方法Python類體中可以定義一個特殊的方法:__call__()方法。定義了__call__()方法的對象稱為可調用對象(Callabe),即該對象可以像函數一樣被調用。7.2類的定義和使用類的成員主要由實例方法和數據成員組成,在類中創(chuàng)建了類的成員后,可以通過類的實例進行訪問。(1)創(chuàng)建實例方法并訪問所謂實例方法,是指在類中定義的種函數,只能在類的實例中調用。同__init__()等魔術方法一樣,實例方法的第一個參數必須是self,并且必須包含一個self參數。創(chuàng)建實例方法的語法格式如下::7.2類的定義和使用參數說明如下:(1)functionName:用于指定方法名,一般使用小寫字母開頭。(2)self:必要參數,表示類的實例,其名稱可以是self以外的單詞,使用self只是一個慣例而已。(3)parameterlist:用于指定除self參數以外的其他參數,各參數之間使用逗號“,”進行間隔。(4)block:方法體,實現的具體功能。7.2類的定義和使用實例方法創(chuàng)建完成后,可以通過類的實例名稱和點(.)操作符進行訪問。具體的語法格式如下:其中,instanceName為類的實例名稱;functionName為要調用的方法名稱;parameterlist為方法指定的實際參數,其值的個數與創(chuàng)建實例方法中parameterlist的個數相同。7.2類的定義和使用數據成員是指在類中定義的變量,即屬性,根據定義位置,又可分為類屬性和實例屬性。(1)類屬性是指定義在類中,并且在函數體外的屬性。類屬性可以在類的所有實例之間共享,也就是在所有實例化的對象中公用。類屬性可以通過類名或實例名進行訪問。(2)實例屬性是指定義在類的方法中的屬性,只作用于當前實例。實例屬性只能通過實例名訪問,不能通過類名訪問。7.2類的定義和使用

7.2類的定義和使用7.2類的定義和使用在類的內部可以定義屬性和方法,而在類的外部則可以直接調用屬性或方法來操作數據,從而隱藏了類內部的復雜邏輯。在Python中通過在屬性或方法名前面添加下畫線(如_foo)、雙下畫線(如__foo)或首尾加雙下畫線(如__foo__),從而限制訪問權限。(1)_foo:以單下畫線開頭的表示protected(保護)類型的成員,只允許類本身和子類進行訪問,但不能使用“frommoduleimport*”語句導入。(2)__foo:雙下畫線表示private(私有)類型的成員,只允許定義該方法的類本身進行訪問,而且也不能通過類的實例進行訪問,但是可以通過“類的實例名._類名__xxx”方式訪問。(3)__foo__:首尾加雙下畫線表示定義特殊方法,一般是系統定義的名字,如__init__()。7.2類的定義和使用7.2類的定義和使用面向對象編程的封裝性原則要求不直接訪問類中的數據成員。Python中可以通過定義私有屬性,然后定義相應的訪問該私有屬性的函數,并使用@property裝飾器裝飾這些函數。程序可以把函數“當作”屬性來訪問,從而提供更加友好的訪問方式。通過@property裝飾器修改類成員函數的語法格式如下:7.2類的定義和使用7.3繼承在編寫類時,并不是每次都要從空白開始,當要編寫的類和另一個已經存在的類之間存在一定的繼承關系時,就可以通過繼承來達到代碼重用的目的,提高開發(fā)效率。(1)繼承的基本語法繼承是面向對象編程的重要特性之一,它源于人們認識客觀世界的過程,是自然界普遍存在的一種現象。7.3繼承在Python中,可以在類定義語句中,類名右側使用一對小括號將要繼承的基類名稱括起來,從而實現類的繼承。具體語法格式如下:7.3繼承7.3繼承(2)方法重寫基類的成員都會被派生類繼承,當基類中的某個方法不完全適用于派生類時,就需要在派生類中重寫父類的這個方法,這和Java中的方法重寫是一樣的。7.3繼承(2)派生類中調用基類的__init__()方法在派生類中定義__init__()方法時,不會自動調用基類的__init__()方法。那么如何在派生類中使用基類的__init__()方法呢?要想在派生類中使用基類的__init__()方法,則必須要進行初始化,即需要在派生類中使用super()函數調用基類的__init__()方法。7.3繼承小結本章詳細介紹了Python面向對象程序設計相關知識點,主要包括面向對象的概念和基本特征、如何在Python中定義和使用類、常見的一些魔術方法、如何創(chuàng)建和訪問類的成員、類成員的訪問限制、如何在Python中定義派生類及在派生類中對方法進行重寫等知識點。雖然本章對面向對象的相關知識介紹得比較詳細和全面,但是想要真正理解透面向對象的思想還需要勤動手、多思考。實訓任務實訓要求使用類和對象實現一個產品庫存管理的應用,主要功能包括向庫存中添加產品(如果庫存中存在該產品,則該產品的庫存數量增加,否則新增該產品的庫存)、產品出庫、按產品名稱或產品編號查找該產品的庫存信息、查看現有庫存信息等系統功能。實訓目的(1)學習Python面向對象程序設計的使用方

溫馨提示

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

最新文檔

評論

0/150

提交評論