




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 第7章 類與面向對象 面向對象 類與對象 構造方法與析構方法 類方法和靜態方法 繼承 多態 掌握了解掌握熟悉 學習目標掌握 面向對象,類的定義與使用12掌握 構造方法,類的繼承,方法的重寫熟悉 創建對象,訪問對象成員,多態34了解 類方法,靜態方法,析構方法 目錄頁01 面向對象02 類與對象03 構造方法與析構方法04 類方法和靜態方法05 實例1:銀行管理系統06 繼承 目錄頁07 實例2:井字棋08 多態 過渡頁01 面向對象02 類與對象03 構造方法與析構方法04 類方法和靜態方法05 實例1:銀行管理系統06 繼承 面向對象概述面向對象是程序開發領域中的重要思想,這種思想模擬了人
2、類認識客觀世界的邏輯,是當前計算機軟件工程學的主流方法。類是面向對象的實現類是面向對象的實現手手段段。 面向對象概述面向過程編程的基本思想是:分析解決問題的步驟,使用函數實現步驟相應的功能,按照步驟的先后順序依次調用函數。面向過程只考慮如何解決當前問題,它著眼于問題本身。 ! 面向對象概述面向對象編程的基本思想是:首先會從問題之中提煉出問題涉及的角色,將不同角色各自的特征和關系進行封裝,以角色為主體,通過描述角色的行為去描述解決問題的過程。面向對象編程的著眼之處在于角色以及角色之間的聯系。 ! 面向對象概述以五子棋為例說明面向過程和面向對象編程的區別。面向過程面向過程游戲開始后黑子一方先落棋,
3、棋子落在棋盤后棋盤產生變化,棋盤更新并判斷輸贏:若本輪落棋的一方勝利則輸出結果并結束游戲,否則白子一方落棋、棋盤更新、判斷輸贏,如此往復,直至分出勝負。面向對象面向對象五子棋游戲中的角色分為兩個:玩家和棋盤。不同的角色負責不同的功能,例如:(1)玩家角色負責控制棋子落下的位置;(2)棋盤角色負責保存棋盤狀況、繪制畫面、判斷輸贏。 面向對象概述角色之間互相獨立,但相互協作,游戲的流程不再由單一的功能函數實現,而是通過調用與角色相關的方法來完成。結 論 面向對象概述面向對象保證了功能的統一性,基于面向對象實現的代碼更容易維護,比如,現在要加入悔棋的功能。面向過程面向過程改動會涉及到游戲的整個流程,
4、輸入、判斷、顯示這一系列步驟都需要修改。面向對象面向對象由于棋盤狀況由棋盤角色保存,只需要為棋盤角色添加回溯功能即可。 面向對象的基本概念對象是現實世界中可描述的事物,它可以是有形的也可以是無形的,從一本書到一家圖書館,從單個整數到繁雜的序列等都可以稱為對象。對象(object) 面向對象的基本概念對象是構成世界的一個獨立單位,它由數據(描述事物的屬性)和作用于數據的操作(體現事物的行為)構成一個獨立整體。對象(object)數據對象操作 面向對象的基本概念從具體的事物中把共同的特征抽取出來,形成一般的概念稱為“歸類”,忽略事物的非本質特牲,關注與目標有關的本質特征,找出事物間的共性,抽象出一
5、個概念模型,就是定義一個類。類(class)動物類動物類 面向對象的基本概念在面向對象的方法中,類是具有相同屬性和行為的一組對象的集合,它提供一個抽象的描述,其內部包括屬性和方法兩個主要部分,它就像一個模具,可以用它鑄造一個個具體的鑄件。類(class) 面向對象的基本概念抽象是抽取特定實例的共同特征,形成概念的過程。抽象(abstract)例例如如蘋果、香蕉、梨、葡萄等,抽取出它們共同特性就得出“水果”這一類,那么得出水果概念的過程,就是一個抽象的過程。 面向對象的基本概念封裝(encapsulation)封裝是面向對象的核心思想,將對象的屬性和行為封裝起來,不需要讓外界知道具體實現細節,這
6、就是封裝思想。 面向對象的基本概念繼承(inheritance)繼承描述的是類與類之間的關系,通過繼承,新生類可以在無需贅寫原有類的情況下,對原有類的功能進行擴展。汽汽車類車類普通特性與功能轎車類轎車類普通特性與功能其它特性與功能繼承繼承 面向對象的基本概念多態( polymorphism)多態指同一個屬性或行為在父類及其各派生類中具有不同的語義。 面向對象的基本概念封裝、繼承、多態是面向對象程序設計的三大特征,它們的簡單關系如下圖所示。 過渡頁01 面向對象02 類與對象03 構造方法與析構方法04 類方法和靜態方法05 實例1:銀行管理系統06 繼承 類和對象的關系面向對象的思想中提出了兩
7、個概念:類和對象。類類類是對多個對象共同特征的抽象描述,它是對象的模板。對象對象對象用于描述現實中的個體,它是類的實例。 類和對象的關系廠商在生產汽車之前會先分析用戶需求,設計汽車模型,制作設計圖樣,設計圖通過之后工廠再依照圖紙批量生產汽車。 類的定義類中可以定義數據成員和成員函數,數據成員用于描述對象特征,成員函數用于描述對象行為,其中數據成員也被稱為屬性,成員函數也被稱為方法。class 類名: 屬性名 = 屬性值 def 方法名(self): 方法體 對象的創建與使用類定義完成后不能直接使用,這就好比畫好了一張房屋設計圖紙,此圖紙只能幫助人們了解房屋的結構,但不能提供居住場所。為滿足居住
8、需求,需要根據房屋設計圖紙搭建實際的房屋。同理,程序中的類需要實例化為對象才能實現其意義。 對象的創建與使用對象的創建創建對象的格式如下:對象名 = 類名() 對象的創建與使用訪問對象成員若想在程序中真正地使用對象,需掌握訪問對象成員的方式。對象成員分為屬性和方法,它們的訪問格式分別如下:對象名.屬性對象名.方法() 訪問限制類中定義的屬性和方法默認為公有屬性和方法,該類的對象可以任意訪問類的公有成員。為了契合封裝原則,保證類中的代碼不被外部代碼輕易訪問。 Python支持將類中的成員設置為私有成員,在一定程度上限制對象對類成員的訪問。 訪問限制定義私有成員Python通過在類成員名之前添加雙
9、下劃線(_)來限制成員的訪問權限,語法格式如下:_屬性名_方法名 訪問限制定義私有成員例如,定義一個包含私有屬性_weight和私有方法_info()的類PersonInfo。class PersonInfo: _weight = 55 # 私有屬性 def _info(self): # 私有方法 print(f我的體重是:_weight) 訪問限制私有成員的訪問創建PersonInfo類的對象person,通過該對象訪問類的屬性:person = PersonInfo()person._weightAttributeError: PersonInfo object has no attrib
10、ute _weight 訪問限制私有成員的訪問注釋訪問私有屬性的代碼,在程序中添加如下的訪問類中私有方法的代碼:person = PersonInfo()# person._weightperson._info()AttributeError: PersonInfo object has no attribute _info 訪問限制由以上展示的錯誤信息可以判斷,對象無法直接訪問類的私有成員。結 論 訪問限制class PersonInfo: _weight = 55 # 私有屬性 def get_weight(self): print(f體重:self._weightkg)person =
11、PersonInfo()person.get_weight()私有屬性可在公有方法中通過指代對象本身的默認參數“self”訪問,類外部可通過公有方法間接獲取類的私有屬性。 訪問限制class PersonInfo: _weight = 55 # 私有屬性 def _info(self): # 私有方法 print(f我的體重是:self._weight) def get_weight(self): print(f體重:self._weightkg) self._info()person = PersonInfo()person.get_weight()私有方法同樣在公有方法中通過參數“self
12、”訪問。 過渡頁01 面向對象02 類與對象03 構造方法與析構方法04 類方法和靜態方法05 實例1:銀行管理系統06 繼承 構造方法每個類都有一個默認的_init_()方法。 如果定義類時顯式地定義_init_()方法,那么創建對象時Python解釋器會調用顯式定義的_init_()方法; 如果定義類時沒有顯式定義_init_()方法,那么Python解釋器會調用默認的_init_()方法。 構造方法_init_()方法按照參數的有無(self除外)可分為有參構造方法和無參構造方法。無參構造方法無參構造方法無參構造方法中可以為屬性設置初始值,此時使用該方法創建的所有對象都具有相同的初始值。
13、有參有參構造方法構造方法有參構造方法中可以使用參數為屬性設置初始值,此時使用該方法創建的所有對象都具有不同的初始值。 構造方法定義一個類Information,在該類中顯式地定義一個帶有3個參數的_init_()方法。class Inforamtion(object): def _init_(self, name, sex): = name self.sex = sexinfomation = Inforamtion(李婉, 女) 構造方法前面在類中定義的屬性是類屬性,可以通過對象或類進行訪問;在構造方法中定義的屬性是實例屬性,只能通過對象進行訪問。 析構方法在介紹析構方法
14、之前,先來了解Python的垃圾回收機制。Python中的垃圾回收主要采用的是引用計數。引用計數是一種內存管理技術,它通過引用計數器記錄所有對象的引用數量,當對象的引用計數器數值為0時,就會將該對象視為垃圾進行回收。 析構方法getrefcount()函數是sys模塊中用于統計對象引用數量的函數,其返回結果通常比預期的結果大1。這是因為getrefcount()函數也會統計臨時對象的引用。 析構方法當一個對象的引用計數器數值為0時,就會調用_del_()方法,這個方法就是類的析構方法。import sysclass Destruction: def _del_(self): print(對象被
15、釋放)destruction = Destruction()print(sys.getrefcount(destruction) 過渡頁01 面向對象02 類與對象03 構造方法與析構方法04 類方法和靜態方法05 實例1:銀行管理系統06 繼承 類方法形似7.2.2中直接定義、只比普通函數多一個self參數的方法稱為實例方法,它只能通過類實例化的對象調用。class Car: wheels = 4 # 屬性 def drive(self): # 實例方法 print(開車方式) 類方法類方法與實例方法有以下不同:類方法類方法實例方法實例方法使用裝飾器classmethod修飾類方法的第一個參
16、數為cls,它代表類本身實例方法的第一個參數為self,它代表對象本身即可由對象調用,亦可直接由類調用只能由對象調用可以修改類屬性無法修改類屬性 類方法類方法可以被類名或對象名調用,其語法格式如下:定義類方法類名.類方法對象名.類方法 類方法在實例方法中無法修改類屬性的值,但在類方法中可以修改類屬性的值。修改類屬性class Apple(object): count = 0 def add_one(self): self.count = 1 classmethod def add_two(cls): cls.count = 2 apple = Apple()apple.add_one() pr
17、int(Apple.count) Apple.add_two()print(Apple.count)02 靜態方法靜態方法與實例方法有以下不同:靜態方法靜態方法實例方法實例方法使用裝飾器staticmethod修飾方法中需要以“類名.方法/屬性名”的形式訪問類的成員方法中需要以“self.方法/屬性名”的形式訪問類的成員即可由對象調用,亦可直接由類調用只能由對象調用 靜態方法定義一個包含屬性num與靜態方法static_method()的類Example。class Example: num = 10 # 類屬性 staticmethod # 定義靜態方法 def static_method(
18、): print(f類屬性的值為:Example.num) print(-靜態方法) 過渡頁01 面向對象02 類與對象03 構造方法與析構方法04 類方法和靜態方法05 實例1:銀行管理系統06 繼承 實例1:銀行管理系統銀行管理系統是一個集開戶、查詢、取款、存款、轉賬、鎖定、解鎖、退出等一系列的功能的管理系統。開戶開戶查詢查詢取款取款存款存款轉賬轉賬鎖定鎖定解鎖解鎖退出退出 實例1:銀行管理系統本實例要求編寫程序,實現一個具有上述功能的銀行管理系統。 過渡頁01 面向對象02 類與對象03 構造方法與析構方法04 類方法和靜態方法05 實例1:銀行管理系統06 繼承 單繼承Python中類
19、與類之間具有繼承關系,其中被繼承的類稱為父類或基類,繼承的類稱為子類或派生類。子類在繼承父類時,會自動擁有父類中的方法和屬性。 單繼承單繼承指的是子類只繼承一個父類,其語法格式如下:class 子類(父類) 單繼承定義一個表示兩棲動物的父類Amphibian和一個表示青蛙的子類Frog。class Amphibian: name = 兩棲動物 def features(self): print(幼年用鰓呼吸) print(成年用肺兼皮膚呼吸)class Frog(Amphibian): def attr(self): print(f青蛙是) print(我會呱呱叫)frog
20、= Frog()print()frog.features()frog.attr() 多繼承多繼承指的是一個子類繼承多個父類,其語法格式如下:class 子類(父類A, 父類B, .): 多繼承定義English類、Math類與Student類,使Student類繼承English類與Math類。class English: def eng_know(self): print(具備英語知識。)class Math: def math_know(self): print(具備數學知識。)class Student(English, Math): def study(self): print(學生的任務是學習。) 方法的重寫子類可以繼承父類的屬性和方法,若父類的方法不能滿足子類的要求,子類可以重寫父類的方法,以實現理想的功能。class Felines: def speciality(self): print(貓科動物特長是爬樹)父類定義如下:父類定義如下:class Cat(Felines): name = 貓 def speciality(self): print(會抓老鼠) print(會爬樹)子類子類定義如下:定義如下: super()函數如果子類重寫了父類的方法,但仍希
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南通市海安縣2025年數學四下期末預測試題含解析
- 云南省怒江市重點中學2024-2025學年高考物理試題模擬題及解析(全國卷Ⅱ)含解析
- 焦作工貿職業學院《中國近代軍事史》2023-2024學年第二學期期末試卷
- 上海工程技術大學《口腔循證醫學》2023-2024學年第二學期期末試卷
- 石家莊工程職業學院《西方文論導讀》2023-2024學年第二學期期末試卷
- 廊坊衛生職業學院《跨境電子商務專業英語》2023-2024學年第二學期期末試卷
- 四川電子機械職業技術學院《英語文學作品漢譯》2023-2024學年第一學期期末試卷
- 江蘇省無錫市北塘區2025年數學四下期末學業質量監測模擬試題含解析
- 連云港職業技術學院《西方哲學史》2023-2024學年第二學期期末試卷
- 江蘇省邗江實驗校2025年初三零模語文試題含解析
- 2024年高級經濟師《工商管理》考試真題
- T-CRHA 089-2024 成人床旁心電監測護理規程
- 監理實施細則模板(信息化、軟件工程)
- 精神疾病治療新靶點-深度研究
- 教學課件-統計學(第三版)袁衛
- 醫院保安員培訓
- 教學設計-3.5函數的最值及其應用
- CNAS-CL01:2018 檢測和校準實驗室能力認可準則
- 血透室敘事護理
- 2024-2025學年湖南省邵陽市新邵縣第二中學高二上學期期中考試英語試卷
- 學習通《形勢與政策》2025春章節測試答案
評論
0/150
提交評論