版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Python程序設(shè)計第7章Python面向?qū)ο缶幊虒W(xué)習(xí)目標(biāo)識記類的語法理解面向?qū)ο笕筇卣髡莆彰嫦驅(qū)ο笕筇卣鞯氖褂梅椒ㄖR目標(biāo)能夠正確編寫Python類能夠使用Python類解決實(shí)際問題能力目標(biāo)數(shù)據(jù)隱私的尊重和保護(hù)創(chuàng)新精神和可持續(xù)發(fā)展意識多樣性思維和包容性情感態(tài)度與價值觀Python類與對象01020403封裝繼承多態(tài)目
錄Python類與對象01020403封裝繼承多態(tài)目
錄面向?qū)ο蠡靖拍铑惖亩x對象的使用面向過程程序設(shè)計以算法為中心問題->一系列步驟制作蛋糕:準(zhǔn)備材料->攪拌面糊->烤制蛋糕胚->涂抹奶油->裱花裝飾mix_batter(flour)bake_cake(power,minites)spread_cream(color)decoration(cream,ftruits,chocolate)面向?qū)ο蟪绦蛟O(shè)計7.1.1面向過程與面向?qū)ο蟪绦蛟O(shè)計1457.1.2類與對象146現(xiàn)實(shí)含義面向?qū)ο蟪绦蛟O(shè)計類和對象類一群具有相似特征或行為的個體的統(tǒng)稱模板或者藍(lán)圖規(guī)定了一組屬性(變量)和一組方法(函數(shù))屬于自定義的數(shù)據(jù)類型人類-張三寵物類-薩摩耶肉包微波爐類-貨架上待售的某臺微波爐對象某個類的一個具體實(shí)例,具有該類的屬性和行為根據(jù)模板將屬性值具體化之后,得到的一個類的實(shí)例個體擁有具體的屬性值能使用類定義的方法封裝:將數(shù)據(jù)和操作捆綁在一起,形成一個類定義每個類的職責(zé)隱藏了內(nèi)部實(shí)現(xiàn)細(xì)節(jié)提高代碼可讀性和可維護(hù)性增加了數(shù)據(jù)的安全性和可靠性。繼承:從已有的類派生出新類的過程避免重復(fù)編寫相同的代碼方便系統(tǒng)擴(kuò)展多態(tài):提高了代碼的靈活性和擴(kuò)展性7.1.3面向?qū)ο笕筇卣?467.2類的定義與對象使用1477.2.1關(guān)鍵字class147class:定義類定義一個空類class類名:#類體classCircle:pass示例7-17.2.2類屬性和類方法147類屬性:與類本身關(guān)聯(lián)的屬性所有對象能夠共享的屬性對于具體的實(shí)例來說意義不大類屬性位于類的頂部,定義在類的任何方法之外使用類屬性class類名:類屬性1=值1類屬性2=值2類名.類屬性名7.2.2類屬性和類方法148類屬性的定義和使用classCircle:pi=3.14159default_line_color='黑色'default_fill_color='白色'print(Circle.pi)Circle.default_line_color='紅色'示例7-27.2.2類屬性和類方法148類方法:封裝與類屬性有關(guān)、與實(shí)例無關(guān)的功能不能直接訪問實(shí)例屬性和實(shí)例方法調(diào)用類方法class類名:@classmethoddef類方法名(cls,參數(shù)列表)#函數(shù)體類名.類方法(除cls之外的參數(shù)值)使用裝飾器@classmethodcls:代表該方法所屬的類,在類方法內(nèi)部將cls當(dāng)類名使用7.2.2類屬性和類方法148類方法的定義和使用classCircle:@classmethoddefset_default_color(cls,line,fill):cls.default_line_color=linecls.default_fill_color=fillCircle.set_default_color('深藍(lán)色','淺藍(lán)色')示例7-37.2.3實(shí)例屬性和實(shí)例方法149實(shí)例屬性:類的對象各自持有的屬性標(biāo)識對象本身的特征值與對象自身密切關(guān)聯(lián),不應(yīng)與其他對象共享舉例每個人的身份證號每臺洗衣機(jī)的品牌和型號每本書的書名和作者實(shí)例屬性通常寫在類的__init__()方法中7.2.3實(shí)例屬性和實(shí)例方法149__init__()方法調(diào)用時機(jī):創(chuàng)建類的新對象時作用:初始化新對象命名:__方法名__特定場景下自動調(diào)用開發(fā)者考慮具體實(shí)現(xiàn)魔術(shù)方法class類名:def__init__(self,參數(shù)1,參數(shù)2,...,參數(shù)N)self.實(shí)例屬性1=參數(shù)1self.實(shí)例屬性2=參數(shù)2...self.實(shí)例屬性N=參數(shù)Nself:代表即將被創(chuàng)建出來的新對象self.實(shí)例屬性名=值7.2.3實(shí)例屬性和實(shí)例方法149實(shí)例屬性的定義classCircle:def__init__(self,r,line_color=default_line_color,fill_color=default_fill_color):self.r=rself.line_color=line_colorself.fill_color=fill_color示例7-47.2.3實(shí)例屬性和實(shí)例方法149實(shí)例的創(chuàng)建變量名=類名(__init__()方法中除了self之外的參數(shù))classCircle:def__init__(self,r,
ine_color=default_line_color,fill_color=default_fill_color):
self.r=rself.line_color=line_colorself.fill_color=fill_colorc1=Circle(1.0)c2=Circle(2.0,'紅色','黃色')示例7-47.2.3實(shí)例屬性和實(shí)例方法150實(shí)例屬性的使用對象.實(shí)例屬性名classCircle:def__init__(self,r,
line_color=default_line_color,fill_color=default_fill_color):self.r=rself.line_color=line_colorself.fill_color=fill_colorc1=Circle(1.0)c2=Circle(2.0,'紅色','黃色')print(f'半徑{c1.r},線條{c1.line_color},填充{c1.fill_color}')示例7-47.2.3實(shí)例屬性和實(shí)例方法150實(shí)例方法:與具體的對象關(guān)聯(lián)的方法需要對象執(zhí)行的行為調(diào)用實(shí)例方法class類名:def實(shí)例方法名(self,參數(shù)1,參數(shù)2,...,參數(shù)N)#代碼塊對象.實(shí)例方法(除self之外的其他參數(shù))self:代表正在調(diào)用這個實(shí)例方法的對象7.2.3實(shí)例屬性和實(shí)例方法150實(shí)例方法的定義與調(diào)用classCircle:def__init__(self,r,
line_color=default_line_color,fill_color=default_fill_color):self.r=rself.line_color=line_colorself.fill_color=fill_color
defdraw(self):print(f'繪制圓:半徑{self.r},線條{self.line_color},填充{self.fill_color}')c1=Circle(2.0,'紅色','黃色')c1.draw()示例7-57.2.4靜態(tài)方法150靜態(tài)方法邏輯上功能和類相關(guān)放在類中更合適通過“類名.靜態(tài)方法()”調(diào)用class類名:@staticmethoddef方法名(參數(shù)列表)#函數(shù)體使用裝飾器@staticmethod7.2.4靜態(tài)方法151靜態(tài)方法的定義和調(diào)用classCircle:pi=3.14159@staticmethoddefcalc_area(r):returnr**2*Circle.piprint(Circle.calc_area(2.0))示例7-6Python類與對象01020403封裝繼承多態(tài)目
錄封裝020403繼承多態(tài)目
錄Python類與對象01Python實(shí)現(xiàn)封裝@property7.3封裝151封裝:信息隱藏只對外提供必要的屬性和方法,提高代碼安全性外部不關(guān)心對象內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),簡化編程過程訪問控制私有保護(hù)公有可以公開:名字受保護(hù)的:財產(chǎn)絕對不能公開:秘密7.3.1Python實(shí)現(xiàn)封裝151Python沒有明確的訪問控制符保護(hù)屬性或方法:單下劃線“_”開始,規(guī)范上約定不能直接使用(用了也不會報錯)私有屬性或方法:雙下劃線“__”開始,語法上不能直接使用(用了會報錯)classDemo1:def__init__(self):self.__private_data=0
def__private_method(self):print('一個前置雙下劃線命名的私有方法')示例7-77.3.1Python實(shí)現(xiàn)封裝151classCircle:definfo(self):print(self.__private_data)self.__private_method()d1=Demo1()print(d1.__private_data)#報錯:AttributeErrord1.__private_method()#報錯:AttributeError
print(d1._Demo1__private_data)d1._Demo1__private_method()示例7-77.3.1Python實(shí)現(xiàn)封裝152前置單下劃線命名保護(hù)的屬性和方法classDemo2:def__init__(self):self._protected_data=0def_protected_method(self):print('一個前置單下劃線命名的保護(hù)方法')definfo(self):print(self._protected_data)self._protected_method()d2=Demo2()print(d2._protected_data)d2._protected_method()示例7-87.3.2@property152通過實(shí)例方法get_r()和set_r()讀寫半徑classCircle:def__init__(self):self.__r=Nonedefget_r(self):returnself.__rdefset_r(self,r):if(isinstance(r,int)orisinstance(r,float))andr>0:self.__r=relse:print('r必須是大于0的整數(shù)或浮點(diǎn)數(shù).')示例7-97.3.2@property152通過實(shí)例方法get_r()和set_r()讀寫半徑@property:定義對象屬性訪問器將一個實(shí)例方法偽裝成實(shí)例屬性簡潔代碼c1=Circle()c1.set_r(2.0)print(c1.get_r())#打印結(jié)果:2.0示例7-97.3.2@property153@property定義只讀屬性fromdatetimeimportdateclassPerson:def__init__(self,name,born):=nameself.born=born示例7-107.3.2@property153@property定義只讀屬性
@propertydefage(self):today=date.today()birthday=self.born.replace(year=today.year)ifbirthday>today:returntoday.year-self.born.year-1else:returntoday.year-self.born.yearp1=Person('',date(1990,5,15))print(p1.age)#打印結(jié)果:33示例7-107.3.2@property153@property定義讀/寫屬性classCircle:def__init__(self):self.__r=None@propertydefr(self):returnself.__r示例7-117.3.2@property153@property定義讀/寫屬性
@r.setterdefr(self,r):if(isinstance(r,int)orisinstance(r,float))andr>0:self.__r=relse:print('r必須是大于0的整數(shù)或浮點(diǎn)數(shù).')c1=Circle()c1.r=2.0print(c1.r)#打印結(jié)果:2.0示例7-11Python類與對象01020403封裝繼承多態(tài)目
錄繼承0304多態(tài)目
錄Python類與對象0102封裝代碼復(fù)用擴(kuò)展新特性7.4.1代碼復(fù)用161繼承:從已有的類派生新的子類,子類完全繼承父類的公有屬性和公有方法實(shí)現(xiàn)代碼復(fù)用,減少類之間代碼冗余子類添加新屬性/方法,靈活擴(kuò)展生命值攻擊值派生成長等級escape()派生攻擊傾向Spirit類Pet類Monster類7.4.1代碼復(fù)用繼承語法class子類名(父類名):#子類實(shí)現(xiàn)7.4.1代碼復(fù)用161Spirit類派生子類Pet和MonsterclassSpirit:def__init__(self,life=100,aggro=False):self.life=lifeself.current_life=lifeself.aggro=aggrodefis_live(self):returnFalseifself.current_life<=0elseTruedefis_aggro(self):returnself.aggro示例7-127.4.1代碼復(fù)用161Spirit類派生子類Pet和MonsterclassPet(Spirit):passclassMonster(Spirit):passp1=Pet(100,True)#調(diào)用父類的__init__()m1=Monster(400,False)#調(diào)用父類的__init__()print(p1.life,p1.current_life,p1.aggro)print(m1.life,m1.current_life,m1.aggro)示例7-127.4.2擴(kuò)展新特性161擴(kuò)展新特性class子類名(父類名)子類類屬性=值def__init__(self,參數(shù)列表):
#初始化繼承的實(shí)例屬性super().__init__(參數(shù)列表)
self.子類實(shí)例屬性=值super():內(nèi)置函數(shù),用于調(diào)用父類的方法,此處調(diào)用確保父類中的初始化代碼正確執(zhí)行子類__init__()方法的參數(shù)列表常常要包含父類初始化所需的參數(shù)7.4.2擴(kuò)展新特性162子類Monster添加新方法classMonster(Spirit):def__init__(self,life=100,aggro=False,exp=200):super().__init__(life,aggro)self.exp=expdefescape(self):p=random.randint(1,100)ifp<=40:print('逃跑成功!')self.current_life=self.lifeelse:print('逃跑失??!')示例7-137.4.2擴(kuò)展新特性162子類Monster添加新方法
defcalc_damage(self,damage):self.current_life-=damageifself.current_life<=0:print('怪物被消滅!')elifself.current_life<100:print('觸發(fā)逃跑事件!')self.escape()#調(diào)用Monster的__init__()m1=Monster(400,False,100)m1.calc_damage(320)#怪物受到320點(diǎn)傷害示例7-13Python類與對象01020403封裝繼承多態(tài)目
錄多態(tài)04目
錄Python類與對象0102封裝03繼承Python多態(tài)實(shí)現(xiàn)7.5多態(tài)163多態(tài):繼承體系中,不同子類對父類的同名方法表現(xiàn)出不同行為同一繼承體系子類重新實(shí)現(xiàn)父類同名方法(不重寫=用父類的)舉例RPG游戲不同的游戲角色攻擊計算方式有所不同在桌面應(yīng)用程序中,按鈕、下拉框、文本框等控件,
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024私房舊房交易資金監(jiān)管合同3篇
- 二零二五年度藥店藥品連鎖加盟店藥品零售連鎖企業(yè)品牌形象及產(chǎn)品銷售權(quán)轉(zhuǎn)讓合同
- 二零二五年度廣告?zhèn)髅狡髽I(yè)員工工資待遇及廣告投放提成合同
- 二零二五年度學(xué)校食堂承包管理合同
- 二零二五年度輪胎維修與智能輪胎管理系統(tǒng)開發(fā)合同
- 二零二五年度環(huán)保監(jiān)測設(shè)備維護(hù)人員勞動合同解除書
- 二零二五年度體育賽事合同評審意見用語解析
- 2025年度新能源產(chǎn)業(yè)貸款居間合同
- 二零二五年度文化旅游項目用工勞務(wù)合同
- 2025年度藝術(shù)展覽合作贊助合同
- 增強(qiáng)現(xiàn)實(shí)技術(shù)在藝術(shù)教育中的應(yīng)用
- TD/T 1060-2021 自然資源分等定級通則(正式版)
- 《創(chuàng)傷失血性休克中國急診專家共識(2023)》解讀
- 倉庫智能化建設(shè)方案
- 海外市場開拓計劃
- 2024年度國家社會科學(xué)基金項目課題指南
- 供應(yīng)鏈組織架構(gòu)與職能設(shè)置
- 幼兒數(shù)學(xué)益智圖形連線題100題(含完整答案)
- 七上-動點(diǎn)、動角問題12道好題-解析
- 2024年九省聯(lián)考新高考 數(shù)學(xué)試卷(含答案解析)
- 紅色歷史研學(xué)旅行課程設(shè)計
評論
0/150
提交評論