版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1Python面向?qū)ο缶幊虆R報(bào)人:某某某匯報(bào)時(shí)間:2023.X.X2提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計(jì)02對(duì)象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計(jì)3提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計(jì)02對(duì)象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計(jì)4面向?qū)ο蟪绦蛟O(shè)計(jì)面向過(guò)程的編程根據(jù)操作數(shù)據(jù)的函數(shù)或語(yǔ)句塊來(lái)設(shè)計(jì)程序的面向?qū)ο蟮木幊虜?shù)據(jù)和功能結(jié)合起來(lái),用稱為對(duì)象的東西包裹起來(lái)組織程序的方法。在大多數(shù)時(shí)候你可以使用過(guò)程性編程,但是有些時(shí)候需要編寫大型程序或是尋求一個(gè)更加合適的解決方案。5面向?qū)ο蟪绦蛟O(shè)計(jì)類創(chuàng)建一個(gè)新類型,而對(duì)象這個(gè)類的實(shí)例。這類似于你有一個(gè)int類型的變量,這存儲(chǔ)整數(shù)的變量是int類的實(shí)例(對(duì)象)。類和對(duì)象是面向?qū)ο缶幊虄蓚€(gè)主要方面。屬于一個(gè)對(duì)象或類的變量被稱為域。對(duì)象也可以使用屬于類的函數(shù)來(lái)具有功能。這樣的函數(shù)被稱為類的方法。域和方法可以合稱為類的屬性。對(duì)象可以使用普通的屬于對(duì)象的變量存儲(chǔ)數(shù)據(jù)。6提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計(jì)02對(duì)象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計(jì)7對(duì)象和類類是對(duì)象的定義,而實(shí)例是“真正的實(shí)物”,它存放了類中所定義的對(duì)象的具體信息域有兩種類型屬于每個(gè)實(shí)例/類的對(duì)象或?qū)儆陬惐旧?。它們分別被稱為實(shí)例變量和類變量。類使用class關(guān)鍵字創(chuàng)建。類的域和方法被列在一個(gè)縮進(jìn)塊中。創(chuàng)建一個(gè)類使用class定義,屬性和函數(shù)都用縮進(jìn)表示#Filename:simplestclass.pyclass
Person:pass#Anempty
blockp=
Person()print
pprint
Person89提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計(jì)02對(duì)象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計(jì)屬性10與類和對(duì)象的名稱空間
綁定
的普通變量,即這些名稱只在這些類與對(duì)象的前提下有效。類名.類變量(使用對(duì)象名.類變量也可訪問(wèn))對(duì)象名.對(duì)象變量定義的位置類屬性
緊跟在類定義之后對(duì)象屬性
在
init
中使用self.xxx=定義使用類數(shù)據(jù)屬性11方法的定義類的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱,但是在調(diào)用這個(gè)方法的時(shí)候你不為這個(gè)參數(shù)賦值,Python會(huì)提供這個(gè)值。這個(gè)特別的變量指對(duì)象本身,按照慣例它的名稱是self??梢允侨我庖粋€(gè)變量名,但最好遵循通用的規(guī)則。init 構(gòu)造函數(shù), del 析構(gòu)函數(shù)12Self參數(shù)的工作原理13假如你有一個(gè)類稱為MyClass和這個(gè)類的一個(gè)實(shí)例MyObject。當(dāng)你調(diào)用這個(gè)對(duì)象的方法MyObject.method(arg1,
arg2)的時(shí)候,這會(huì)由Python自動(dòng)轉(zhuǎn)為MyClass.method(MyObject,arg1,
arg2)——這就是self的原理了。如果你有一個(gè)不需要參數(shù)的方法,你還是得給這個(gè)方法定義一個(gè)self參數(shù)。方法的使用調(diào)用方法同普通函數(shù)一致,忽略self參數(shù)。對(duì)象名.方法名(參數(shù)…)14方法的使用沒(méi)有實(shí)例,方法是不能被調(diào)用的。15init ()
"構(gòu)造器"方法16當(dāng)類被調(diào)用,實(shí)例化的第一步是創(chuàng)建實(shí)例對(duì)象。一旦對(duì)象創(chuàng)建了,Python
檢查是否實(shí)現(xiàn)了
init
()方法。默認(rèn)情況下,如果沒(méi)有定義(或覆蓋)特殊方法
init
(),對(duì)實(shí)例不會(huì)施加任何特別的操作.任何所需的特定操作,都需要程序員實(shí)現(xiàn)
init
(),覆蓋它的默認(rèn)行為。如果
init
()沒(méi)有實(shí)現(xiàn),則返回它的對(duì)象,實(shí)
例化過(guò)程完畢。
init()
"構(gòu)造器"方法如果
init
()已經(jīng)被實(shí)現(xiàn),那么它將被調(diào)用,實(shí)例對(duì)象作為第一個(gè)參數(shù)(self)被傳遞進(jìn)去,像標(biāo)準(zhǔn)方法調(diào)用一樣。調(diào)用類時(shí),傳進(jìn)的任何參數(shù)都交給了
init
()
init
(),是在解釋器為你創(chuàng)建一個(gè)實(shí)例后調(diào)用的第一個(gè)方法,在你開始使用它之前,這一步可以讓你做些準(zhǔn)備工作。17del ()
"解構(gòu)器"方法有一個(gè)相應(yīng)的特殊解構(gòu)器(destructor)方法名為 del ()。由于Python
具有垃圾對(duì)象回收機(jī)制(靠引用計(jì)數(shù)),這個(gè)函數(shù)要直到該實(shí)例對(duì)象所有的引用都被清除掉后才會(huì)執(zhí)行。Python
中的解構(gòu)器是在實(shí)例釋放前提供特殊處理功能的方法,它們通常沒(méi)有被實(shí)現(xiàn),因?yàn)閷?shí)例很少被顯式釋放。18使用缺省參數(shù)進(jìn)行實(shí)例化19定義一個(gè)類來(lái)計(jì)算假想旅館租房費(fèi)用。
init
()構(gòu)造器對(duì)一些實(shí)例屬性進(jìn)行初始化。calcTotal()方法可以計(jì)算每日所有費(fèi)用,如果提供了天數(shù),那么將計(jì)算整個(gè)旅程全部的住宿費(fèi)用。內(nèi)建的round()函數(shù)可以大約計(jì)算出最接近的費(fèi)用(兩個(gè)小數(shù)位)。使用缺省參數(shù)進(jìn)行實(shí)例化20使用缺省參數(shù)進(jìn)行實(shí)例化21使用缺省參數(shù)進(jìn)行實(shí)例化22使用缺省參數(shù)進(jìn)行實(shí)例化23最開始的兩個(gè)假想例子都是在舊金山,
使用了默認(rèn)值。然后是在西雅圖,
這里我們提供了不同的銷售稅和房間稅率。最后一個(gè)例子在華盛頓特區(qū)。經(jīng)過(guò)計(jì)算更長(zhǎng)的假想時(shí)間,來(lái)擴(kuò)展通常的用法:停留五個(gè)工作日,外加一個(gè)周六,此時(shí)有特價(jià),假定是星期天出發(fā)回家。使用缺省參數(shù)進(jìn)行實(shí)例化24函數(shù)所有的靈活性,比如默認(rèn)參數(shù),也可以應(yīng)用到方法中去。在實(shí)例化時(shí),可變長(zhǎng)度參數(shù)也是一個(gè)好的特性。如果定義了構(gòu)造器,它不應(yīng)返回任何對(duì)象因?yàn)閷?shí)例對(duì)象是自動(dòng)在實(shí)例化調(diào)用后返回的。相應(yīng)地,
init
()就不應(yīng)當(dāng)返回任何對(duì)象(應(yīng)當(dāng)為None);否則,就可能出現(xiàn)沖突,因?yàn)橹荒芊祷貙?shí)例。25提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計(jì)02對(duì)象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計(jì)26一個(gè)類被定義后,目標(biāo)就是要把它當(dāng)成一個(gè)模塊來(lái)使用,并把這些對(duì)象嵌入到你的代碼中去,同其它數(shù)據(jù)類型及邏輯執(zhí)行流混合使用。有兩種方法可以在你的代碼中利用類。第一種是組合。就是讓不同的類混合并加入到其它類中,來(lái)增加功能和代碼重用性。另一種方法是通過(guò)派生。組合27子類、派生和繼承當(dāng)你設(shè)計(jì)“相同的類但有一些不同的功能”時(shí),派生就是一個(gè)合理的選擇了。面向?qū)ο缶幊棠軌蚴褂靡粋€(gè)已經(jīng)定義好的類,擴(kuò)展它或者對(duì)其進(jìn)行修改,而不會(huì)影響系統(tǒng)中使用現(xiàn)存類的其它代碼片段。允許類特征在子孫類或子類中進(jìn)行繼承。這些子類從基類(或稱祖先類,超類)繼承它們的核心屬性。這些派生可能會(huì)擴(kuò)展到多代。組合樣例28對(duì)地址本類的加強(qiáng)性設(shè)計(jì)。如果在設(shè)計(jì)的過(guò)程中,為
names,addresses
等等創(chuàng)建了單獨(dú)的類。最后我們可能想把這些工作集成到AddrBookEntry類中去,而不是重新設(shè)計(jì)每一個(gè)需要的類。這樣節(jié)省了時(shí)間和精力,而且最后的結(jié)果是容易維護(hù)的代碼
---
一塊代碼中的bugs
被修正,將反映到整個(gè)應(yīng)用中。組合樣例29這樣的類可能包含一個(gè)Name
實(shí)例,以及其它的像StreetAddress,
Phone
,
Email,
還可能需要一些Date
實(shí)例。下面是一個(gè)簡(jiǎn)單的例子:class
NewAddrBookEntry(object):
#class
definition
類定義'newaddressbookentry
class'def
init
(self,
nm,
ph):
#
define
constructor
定義構(gòu)造器
=
Name(nm)
#create
Name
instance
創(chuàng)建Name
實(shí)例self.phone
=
Phone(ph)
#create
Phone
instance
創(chuàng)建Phone
實(shí)例print'Createdinstancefor:',
組合樣例30NewAddrBookEntry
類由它自身和其它類組合而成。這就在一個(gè)類和其它組成類之間定義了一種“has-a
/有一個(gè)”的關(guān)系。比如,我們的NewAddrBookEntry
類“有一個(gè)”
Name類實(shí)例和一個(gè)Phone實(shí)例。創(chuàng)建復(fù)合對(duì)象就可以實(shí)現(xiàn)這些附加的功能,并且很有意義,因?yàn)檫@些類都不相同。子類和派生31如果必須創(chuàng)建不同類型的地址本。希望EmplAddrBookEntry
類中包含更多與工作有關(guān)的屬性,如員工ID
和e-mail
地址?這跟PersonalAddrBookEntry
類不同,它包含更多基于家庭的信息,比如家庭地址,關(guān)系,生日等等。兩種情況下,都不想到從頭開始設(shè)計(jì)這些類,因?yàn)檫@樣做會(huì)重復(fù)創(chuàng)建通用的AddressBook類時(shí)的操作。子類和派生32包含AddressBook
類所有的特征和特性并加入需要的定制特性不是很好嗎?這就是類派生的動(dòng)機(jī)和要求。創(chuàng)建子類的語(yǔ)法看起來(lái)與普通(新式)類沒(méi)有區(qū)別,一個(gè)類名,后跟一個(gè)或多個(gè)需要從其中派生的父類:classSubClassName(ParentClass1[,
parentClass2,...]):class_suite繼承33繼承描述了基類的屬性如何“遺傳”給派生類。一個(gè)子類可以繼承它的基類的任何屬性,不管是數(shù)據(jù)屬性還是方法。P
是一個(gè)沒(méi)有屬性的簡(jiǎn)單類。C
從P
繼承而來(lái)(因此是它的子類),也沒(méi)有屬性:class
P(object):
#
parent
class
父類passclass
C(P):#child
class
子類pass繼承34因?yàn)镻
沒(méi)有屬性,C
沒(méi)有繼承到什么。下面我們給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)造器,當(dāng)我們實(shí)例化P
時(shí)它被執(zhí)行,如下所示:3536提綱CONTENTS01面向?qū)ο蟪绦蛟O(shè)計(jì)02對(duì)象和類04組合、子類、派生和繼承03屬性和方法05UML設(shè)計(jì)UML類圖中的關(guān)系37UML(統(tǒng)一建模語(yǔ)言)類與類之間的關(guān)系繼承實(shí)現(xiàn)對(duì)象與對(duì)象之間的關(guān)系依賴
(Dependency
)關(guān)聯(lián)(Association)聚合(Aggregation)
合成(Composition)
UML中類的關(guān)系—繼承繼承指的是一個(gè)類(稱為子類、子接口)繼承另外的一個(gè)類(稱為父類、父接口)的功能,并可以增加它自己的新功能的能力;在Python中類定義時(shí)后面括號(hào)中可加上父類。class
people:def
init
(self):…class
student(people):….38UML中類和接口—實(shí)現(xiàn)實(shí)現(xiàn)指的是一個(gè)class類實(shí)現(xiàn)interface接口(可以是多個(gè))的功能;實(shí)現(xiàn)是類與接口之間最常見的關(guān)系;Python不支持接口,具體實(shí)現(xiàn)時(shí)可用類代替;39UML對(duì)象與對(duì)象關(guān)系-依賴依賴可以簡(jiǎn)單的理解,就是一個(gè)類A使用到了另一個(gè)類B,而這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,但是B類的變化會(huì)影響到A比如某人要過(guò)河,需要借用一條船,此時(shí)人與船之間的關(guān)系就是依賴;表現(xiàn)在代碼層面,為類B作為參數(shù)被類A在某個(gè)method方法中使用;40UML對(duì)象與對(duì)象關(guān)系-關(guān)聯(lián)關(guān)聯(lián)體現(xiàn)的是兩個(gè)類、或者類與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴關(guān)系;比如我和我的朋友;這種關(guān)系比依賴更強(qiáng)、不存在依賴關(guān)系的偶然性、關(guān)系也不是臨時(shí)性
的,一般是長(zhǎng)期性的,而且雙方的關(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引用了一個(gè)類型為被關(guān)聯(lián)類B的全局變量;41UML對(duì)象與對(duì)象關(guān)系-聚合聚合聚合是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是整體與部分、擁有的關(guān)系,即has-a的關(guān)系,此時(shí)整體與部分之間是可分離的,他們可以具有各自的生命周期,
部分可以屬于多個(gè)整體對(duì)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年國(guó)內(nèi)自駕游汽車租賃服務(wù)協(xié)議
- 2024年食品原料采購(gòu)協(xié)議范本
- 車輛租賃服務(wù)協(xié)議范本2024
- 農(nóng)藥制造中的工藝優(yōu)化與節(jié)能減排考核試卷
- 氫燃料電池發(fā)動(dòng)機(jī)技術(shù)考核試卷
- 2024年企業(yè)生產(chǎn)“安康杯及安全生產(chǎn)月”知識(shí)考試題庫(kù)與答案
- 水產(chǎn)品價(jià)格預(yù)測(cè)與決策考核試卷
- 光學(xué)測(cè)量系統(tǒng)的動(dòng)態(tài)性能與響應(yīng)速度分析考核試卷
- 建設(shè)項(xiàng)目職業(yè)衛(wèi)生管理考核試卷
- 天然氣資源的科學(xué)開發(fā)與利用考核試卷
- 醫(yī)院放射診療中的輻射防護(hù)常識(shí)學(xué)習(xí)培訓(xùn)
- 誡子書綜合測(cè)試題及答案
- 重慶綠地系統(tǒng)規(guī)劃
- 小升初數(shù)學(xué)銜接講座
- 提高自我保護(hù)意識(shí)主題班會(huì)
- 醫(yī)院門診信息管理系統(tǒng)可行性研究報(bào)告
- 《銀屑病臨床表現(xiàn)》課件
- 智慧后勤系統(tǒng)市場(chǎng)分析報(bào)告
- 承包人實(shí)施計(jì)劃
- “山東通”協(xié)同辦公平臺(tái) 應(yīng)用系統(tǒng)接入規(guī)范-地方標(biāo)準(zhǔn)
- 技術(shù)分紅協(xié)議合同
評(píng)論
0/150
提交評(píng)論