![Python面向?qū)ο缶幊陶n件_第1頁](http://file4.renrendoc.com/view/29564a794fb8e4c24d046ae97b404d5a/29564a794fb8e4c24d046ae97b404d5a1.gif)
![Python面向?qū)ο缶幊陶n件_第2頁](http://file4.renrendoc.com/view/29564a794fb8e4c24d046ae97b404d5a/29564a794fb8e4c24d046ae97b404d5a2.gif)
![Python面向?qū)ο缶幊陶n件_第3頁](http://file4.renrendoc.com/view/29564a794fb8e4c24d046ae97b404d5a/29564a794fb8e4c24d046ae97b404d5a3.gif)
![Python面向?qū)ο缶幊陶n件_第4頁](http://file4.renrendoc.com/view/29564a794fb8e4c24d046ae97b404d5a/29564a794fb8e4c24d046ae97b404d5a4.gif)
![Python面向?qū)ο缶幊陶n件_第5頁](http://file4.renrendoc.com/view/29564a794fb8e4c24d046ae97b404d5a/29564a794fb8e4c24d046ae97b404d5a5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1Python面向?qū)ο缶幊虆R報人:某某某匯報時間:2023.X.X2提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計02對象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計3提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計02對象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計4面向?qū)ο蟪绦蛟O(shè)計面向過程的編程根據(jù)操作數(shù)據(jù)的函數(shù)或語句塊來設(shè)計程序的面向?qū)ο蟮木幊虜?shù)據(jù)和功能結(jié)合起來,用稱為對象的東西包裹起來組織程序的方法。在大多數(shù)時候你可以使用過程性編程,但是有些時候需要編寫大型程序或是尋求一個更加合適的解決方案。5面向?qū)ο蟪绦蛟O(shè)計類創(chuàng)建一個新類型,而對象這個類的實例。這類似于你有一個int類型的變量,這存儲整數(shù)的變量是int類的實例(對象)。類和對象是面向?qū)ο缶幊虄蓚€主要方面。屬于一個對象或類的變量被稱為域。對象也可以使用屬于類的函數(shù)來具有功能。這樣的函數(shù)被稱為類的方法。域和方法可以合稱為類的屬性。對象可以使用普通的屬于對象的變量存儲數(shù)據(jù)。6提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計02對象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計7對象和類類是對象的定義,而實例是“真正的實物”,它存放了類中所定義的對象的具體信息域有兩種類型屬于每個實例/類的對象或?qū)儆陬惐旧怼K鼈兎謩e被稱為實例變量和類變量。類使用class關(guān)鍵字創(chuàng)建。類的域和方法被列在一個縮進塊中。創(chuàng)建一個類使用class定義,屬性和函數(shù)都用縮進表示#Filename:simplestclass.pyclass
Person:pass#Anempty
blockp=
Person()print
pprint
Person89提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計02對象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計屬性10與類和對象的名稱空間
綁定
的普通變量,即這些名稱只在這些類與對象的前提下有效。類名.類變量(使用對象名.類變量也可訪問)對象名.對象變量定義的位置類屬性
緊跟在類定義之后對象屬性
在
init
中使用self.xxx=定義使用類數(shù)據(jù)屬性11方法的定義類的方法與普通的函數(shù)只有一個特別的區(qū)別——它們必須有一個額外的第一個參數(shù)名稱,但是在調(diào)用這個方法的時候你不為這個參數(shù)賦值,Python會提供這個值。這個特別的變量指對象本身,按照慣例它的名稱是self。可以是任意一個變量名,但最好遵循通用的規(guī)則。init 構(gòu)造函數(shù), del 析構(gòu)函數(shù)12Self參數(shù)的工作原理13假如你有一個類稱為MyClass和這個類的一個實例MyObject。當你調(diào)用這個對象的方法MyObject.method(arg1,
arg2)的時候,這會由Python自動轉(zhuǎn)為MyClass.method(MyObject,arg1,
arg2)——這就是self的原理了。如果你有一個不需要參數(shù)的方法,你還是得給這個方法定義一個self參數(shù)。方法的使用調(diào)用方法同普通函數(shù)一致,忽略self參數(shù)。對象名.方法名(參數(shù)…)14方法的使用沒有實例,方法是不能被調(diào)用的。15init ()
"構(gòu)造器"方法16當類被調(diào)用,實例化的第一步是創(chuàng)建實例對象。一旦對象創(chuàng)建了,Python
檢查是否實現(xiàn)了
init
()方法。默認情況下,如果沒有定義(或覆蓋)特殊方法
init
(),對實例不會施加任何特別的操作.任何所需的特定操作,都需要程序員實現(xiàn)
init
(),覆蓋它的默認行為。如果
init
()沒有實現(xiàn),則返回它的對象,實
例化過程完畢。
init()
"構(gòu)造器"方法如果
init
()已經(jīng)被實現(xiàn),那么它將被調(diào)用,實例對象作為第一個參數(shù)(self)被傳遞進去,像標準方法調(diào)用一樣。調(diào)用類時,傳進的任何參數(shù)都交給了
init
()
init
(),是在解釋器為你創(chuàng)建一個實例后調(diào)用的第一個方法,在你開始使用它之前,這一步可以讓你做些準備工作。17del ()
"解構(gòu)器"方法有一個相應(yīng)的特殊解構(gòu)器(destructor)方法名為 del ()。由于Python
具有垃圾對象回收機制(靠引用計數(shù)),這個函數(shù)要直到該實例對象所有的引用都被清除掉后才會執(zhí)行。Python
中的解構(gòu)器是在實例釋放前提供特殊處理功能的方法,它們通常沒有被實現(xiàn),因為實例很少被顯式釋放。18使用缺省參數(shù)進行實例化19定義一個類來計算假想旅館租房費用。
init
()構(gòu)造器對一些實例屬性進行初始化。calcTotal()方法可以計算每日所有費用,如果提供了天數(shù),那么將計算整個旅程全部的住宿費用。內(nèi)建的round()函數(shù)可以大約計算出最接近的費用(兩個小數(shù)位)。使用缺省參數(shù)進行實例化20使用缺省參數(shù)進行實例化21使用缺省參數(shù)進行實例化22使用缺省參數(shù)進行實例化23最開始的兩個假想例子都是在舊金山,
使用了默認值。然后是在西雅圖,
這里我們提供了不同的銷售稅和房間稅率。最后一個例子在華盛頓特區(qū)。經(jīng)過計算更長的假想時間,來擴展通常的用法:停留五個工作日,外加一個周六,此時有特價,假定是星期天出發(fā)回家。使用缺省參數(shù)進行實例化24函數(shù)所有的靈活性,比如默認參數(shù),也可以應(yīng)用到方法中去。在實例化時,可變長度參數(shù)也是一個好的特性。如果定義了構(gòu)造器,它不應(yīng)返回任何對象因為實例對象是自動在實例化調(diào)用后返回的。相應(yīng)地,
init
()就不應(yīng)當返回任何對象(應(yīng)當為None);否則,就可能出現(xiàn)沖突,因為只能返回實例。25提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計02對象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計26一個類被定義后,目標就是要把它當成一個模塊來使用,并把這些對象嵌入到你的代碼中去,同其它數(shù)據(jù)類型及邏輯執(zhí)行流混合使用。有兩種方法可以在你的代碼中利用類。第一種是組合。就是讓不同的類混合并加入到其它類中,來增加功能和代碼重用性。另一種方法是通過派生。組合27子類、派生和繼承當你設(shè)計“相同的類但有一些不同的功能”時,派生就是一個合理的選擇了。面向?qū)ο缶幊棠軌蚴褂靡粋€已經(jīng)定義好的類,擴展它或者對其進行修改,而不會影響系統(tǒng)中使用現(xiàn)存類的其它代碼片段。允許類特征在子孫類或子類中進行繼承。這些子類從基類(或稱祖先類,超類)繼承它們的核心屬性。這些派生可能會擴展到多代。組合樣例28對地址本類的加強性設(shè)計。如果在設(shè)計的過程中,為
names,addresses
等等創(chuàng)建了單獨的類。最后我們可能想把這些工作集成到AddrBookEntry類中去,而不是重新設(shè)計每一個需要的類。這樣節(jié)省了時間和精力,而且最后的結(jié)果是容易維護的代碼
---
一塊代碼中的bugs
被修正,將反映到整個應(yīng)用中。組合樣例29這樣的類可能包含一個Name
實例,以及其它的像StreetAddress,
Phone
,
Email,
還可能需要一些Date
實例。下面是一個簡單的例子:class
NewAddrBookEntry(object):
#class
definition
類定義'newaddressbookentry
class'def
init
(self,
nm,
ph):
#
define
constructor
定義構(gòu)造器
=
Name(nm)
#create
Name
instance
創(chuàng)建Name
實例self.phone
=
Phone(ph)
#create
Phone
instance
創(chuàng)建Phone
實例print'Createdinstancefor:',
組合樣例30NewAddrBookEntry
類由它自身和其它類組合而成。這就在一個類和其它組成類之間定義了一種“has-a
/有一個”的關(guān)系。比如,我們的NewAddrBookEntry
類“有一個”
Name類實例和一個Phone實例。創(chuàng)建復(fù)合對象就可以實現(xiàn)這些附加的功能,并且很有意義,因為這些類都不相同。子類和派生31如果必須創(chuàng)建不同類型的地址本。希望EmplAddrBookEntry
類中包含更多與工作有關(guān)的屬性,如員工ID
和e-mail
地址?這跟PersonalAddrBookEntry
類不同,它包含更多基于家庭的信息,比如家庭地址,關(guān)系,生日等等。兩種情況下,都不想到從頭開始設(shè)計這些類,因為這樣做會重復(fù)創(chuàng)建通用的AddressBook類時的操作。子類和派生32包含AddressBook
類所有的特征和特性并加入需要的定制特性不是很好嗎?這就是類派生的動機和要求。創(chuàng)建子類的語法看起來與普通(新式)類沒有區(qū)別,一個類名,后跟一個或多個需要從其中派生的父類:classSubClassName(ParentClass1[,
parentClass2,...]):class_suite繼承33繼承描述了基類的屬性如何“遺傳”給派生類。一個子類可以繼承它的基類的任何屬性,不管是數(shù)據(jù)屬性還是方法。P
是一個沒有屬性的簡單類。C
從P
繼承而來(因此是它的子類),也沒有屬性:class
P(object):
#
parent
class
父類passclass
C(P):#child
class
子類pass繼承34因為P
沒有屬性,C
沒有繼承到什么。下面我們給P
添加一些屬性:class
P:#parent
class
父類'P
class'def
init
(self):print'createdaninstanceof',
\self.
class
.
name
class
C(P):#child
class
子類pass繼承現(xiàn)在所創(chuàng)建的P
有文檔字符串( doc )和構(gòu)造器,當我們實例化P
時它被執(zhí)行,如下所示:3536提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計02對象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計UML類圖中的關(guān)系37UML(統(tǒng)一建模語言)類與類之間的關(guān)系繼承實現(xiàn)對象與對象之間的關(guān)系依賴
(Dependency
)關(guān)聯(lián)(Association)聚合(Aggregation)
合成(Composition)
UML中類的關(guān)系—繼承繼承指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類、父接口)的功能,并可以增加它自己的新功能的能力;在Python中類定義時后面括號中可加上父類。class
people:def
init
(self):…class
student(people):….38UML中類和接口—實現(xiàn)實現(xiàn)指的是一個class類實現(xiàn)interface接口(可以是多個)的功能;實現(xiàn)是類與接口之間最常見的關(guān)系;Python不支持接口,具體實現(xiàn)時可用類代替;39UML對象與對象關(guān)系-依賴依賴可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關(guān)系是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A比如某人要過河,需要借用一條船,此時人與船之間的關(guān)系就是依賴;表現(xiàn)在代碼層面,為類B作為參數(shù)被類A在某個method方法中使用;40UML對象與對象關(guān)系-關(guān)聯(lián)關(guān)聯(lián)體現(xiàn)的是兩個類、或者類與接口之間語義級別的一種強依賴關(guān)系;比如我和我的朋友;這種關(guān)系比依賴更強、不存在依賴關(guān)系的偶然性、關(guān)系也不是臨時性
的,一般是長期性的,而且雙方的關(guān)系一般是平等的、關(guān)聯(lián)可以是單向、雙向的;表現(xiàn)在代碼層面,為被關(guān)聯(lián)類B以類屬性的形式出現(xiàn)在關(guān)聯(lián)類A中,也可能是關(guān)聯(lián)
類A引用了一個類型為被關(guān)聯(lián)類B的全局變量;41UML對象與對象關(guān)系-聚合聚合聚合是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是整體與部分、擁有的關(guān)系,即has-a的關(guān)系,此時整體與部分之間是可分離的,他們可以具有各自的生命周期,
部分可以屬于多個整體對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 10吃飯有講究(說課稿)-部編版道德與法治一年級上冊
- 7 湯姆·索亞歷險記(節(jié)選)說課稿-2023-2024學(xué)年六年級下冊語文統(tǒng)編版
- 2025集體土地房屋轉(zhuǎn)讓合同
- Unit 2 My week PB Let's talk (說課稿)-2024-2025學(xué)年人教PEP版英語五年級上冊001
- 2025產(chǎn)品銷售咨詢服務(wù)合同(中介撮合客戶)
- 2025合同模板車位租賃合同范本
- 10吃飯有講究 說課稿-2024-2025學(xué)年道德與法治一年級上冊統(tǒng)編版001
- 個人汽車信貸合同范例
- 鄉(xiāng)村道路改造雨季施工方案
- 重慶不銹鋼支撐施工方案
- 美容衛(wèi)生管理制度
- 銅陵2025年安徽銅陵郊區(qū)周潭鎮(zhèn)招聘鄉(xiāng)村振興專干和村級后備干部5人筆試歷年參考題庫附帶答案詳解
- 2025年紀檢辦公室工作計劃范文
- 七年級上學(xué)期歷史期末考試模擬卷02(原卷版)
- 橋梁建設(shè)施工組織設(shè)計方案
- (新版)中國動態(tài)血壓監(jiān)測基層應(yīng)用指南(2024年)
- 礦物加工工程基礎(chǔ)知識單選題100道及答案解析
- 2024年同等學(xué)力申碩英語考試真題
- 浙江省杭州市2024年中考語文試卷(含答案)
- 世說新語原文及翻譯-副本
- 電力通信光纜檢修標準化作業(yè)指導(dǎo)書
評論
0/150
提交評論