Python程序設(shè)計基礎(chǔ)教程(微課版) 課件 第7章 - Python面向?qū)ο缶幊蘝第1頁
Python程序設(shè)計基礎(chǔ)教程(微課版) 課件 第7章 - Python面向?qū)ο缶幊蘝第2頁
Python程序設(shè)計基礎(chǔ)教程(微課版) 課件 第7章 - Python面向?qū)ο缶幊蘝第3頁
Python程序設(shè)計基礎(chǔ)教程(微課版) 課件 第7章 - Python面向?qū)ο缶幊蘝第4頁
Python程序設(shè)計基礎(chǔ)教程(微課版) 課件 第7章 - Python面向?qū)ο缶幊蘝第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Python程序設(shè)計第7章Python面向?qū)ο缶幊虒W(xué)習(xí)目標(biāo)識記類的語法理解面向?qū)ο笕筇卣髡莆彰嫦驅(qū)ο笕筇卣鞯氖褂梅椒ㄖR目標(biāo)能夠正確編寫Python類能夠使用Python類解決實際問題能力目標(biāo)數(shù)據(jù)隱私的尊重和保護創(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)實含義面向?qū)ο蟪绦蛟O(shè)計類和對象類一群具有相似特征或行為的個體的統(tǒng)稱模板或者藍(lán)圖規(guī)定了一組屬性(變量)和一組方法(函數(shù))屬于自定義的數(shù)據(jù)類型人類-張三寵物類-薩摩耶肉包微波爐類-貨架上待售的某臺微波爐對象某個類的一個具體實例,具有該類的屬性和行為根據(jù)模板將屬性值具體化之后,得到的一個類的實例個體擁有具體的屬性值能使用類定義的方法封裝:將數(shù)據(jù)和操作捆綁在一起,形成一個類定義每個類的職責(zé)隱藏了內(nèi)部實現(xiàn)細(xì)節(jié)提高代碼可讀性和可維護性增加了數(shù)據(jù)的安全性和可靠性。繼承:從已有的類派生出新類的過程避免重復(fù)編寫相同的代碼方便系統(tǒng)擴展多態(tài):提高了代碼的靈活性和擴展性7.1.3面向?qū)ο笕筇卣?467.2類的定義與對象使用1477.2.1關(guān)鍵字class147class:定義類定義一個空類class類名:#類體classCircle:pass示例7-17.2.2類屬性和類方法147類屬性:與類本身關(guān)聯(lián)的屬性所有對象能夠共享的屬性對于具體的實例來說意義不大類屬性位于類的頂部,定義在類的任何方法之外使用類屬性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)、與實例無關(guān)的功能不能直接訪問實例屬性和實例方法調(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實例屬性和實例方法149實例屬性:類的對象各自持有的屬性標(biāo)識對象本身的特征值與對象自身密切關(guān)聯(lián),不應(yīng)與其他對象共享舉例每個人的身份證號每臺洗衣機的品牌和型號每本書的書名和作者實例屬性通常寫在類的__init__()方法中7.2.3實例屬性和實例方法149__init__()方法調(diào)用時機:創(chuàng)建類的新對象時作用:初始化新對象命名:__方法名__特定場景下自動調(diào)用開發(fā)者考慮具體實現(xiàn)魔術(shù)方法class類名:def__init__(self,參數(shù)1,參數(shù)2,...,參數(shù)N)self.實例屬性1=參數(shù)1self.實例屬性2=參數(shù)2...self.實例屬性N=參數(shù)Nself:代表即將被創(chuàng)建出來的新對象self.實例屬性名=值7.2.3實例屬性和實例方法149實例屬性的定義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實例屬性和實例方法149實例的創(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實例屬性和實例方法150實例屬性的使用對象.實例屬性名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實例屬性和實例方法150實例方法:與具體的對象關(guān)聯(lián)的方法需要對象執(zhí)行的行為調(diào)用實例方法class類名:def實例方法名(self,參數(shù)1,參數(shù)2,...,參數(shù)N)#代碼塊對象.實例方法(除self之外的其他參數(shù))self:代表正在調(diào)用這個實例方法的對象7.2.3實例屬性和實例方法150實例方法的定義與調(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實現(xiàn)封裝@property7.3封裝151封裝:信息隱藏只對外提供必要的屬性和方法,提高代碼安全性外部不關(guān)心對象內(nèi)部的實現(xiàn)細(xì)節(jié),簡化編程過程訪問控制私有保護公有可以公開:名字受保護的:財產(chǎn)絕對不能公開:秘密7.3.1Python實現(xiàn)封裝151Python沒有明確的訪問控制符保護屬性或方法:單下劃線“_”開始,規(guī)范上約定不能直接使用(用了也不會報錯)私有屬性或方法:雙下劃線“__”開始,語法上不能直接使用(用了會報錯)classDemo1:def__init__(self):self.__private_data=0

def__private_method(self):print('一個前置雙下劃線命名的私有方法')示例7-77.3.1Python實現(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實現(xiàn)封裝152前置單下劃線命名保護的屬性和方法classDemo2:def__init__(self):self._protected_data=0def_protected_method(self):print('一個前置單下劃線命名的保護方法')definfo(self):print(self._protected_data)self._protected_method()d2=Demo2()print(d2._protected_data)d2._protected_method()示例7-87.3.2@property152通過實例方法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ù)或浮點數(shù).')示例7-97.3.2@property152通過實例方法get_r()和set_r()讀寫半徑@property:定義對象屬性訪問器將一個實例方法偽裝成實例屬性簡潔代碼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ù)或浮點數(shù).')c1=Circle()c1.r=2.0print(c1.r)#打印結(jié)果:2.0示例7-11Python類與對象01020403封裝繼承多態(tài)目

錄繼承0304多態(tài)目

錄Python類與對象0102封裝代碼復(fù)用擴展新特性7.4.1代碼復(fù)用161繼承:從已有的類派生新的子類,子類完全繼承父類的公有屬性和公有方法實現(xiàn)代碼復(fù)用,減少類之間代碼冗余子類添加新屬性/方法,靈活擴展生命值攻擊值派生成長等級escape()派生攻擊傾向Spirit類Pet類Monster類7.4.1代碼復(fù)用繼承語法class子類名(父類名):#子類實現(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擴展新特性161擴展新特性class子類名(父類名)子類類屬性=值def__init__(self,參數(shù)列表):

#初始化繼承的實例屬性super().__init__(參數(shù)列表)

self.子類實例屬性=值super():內(nèi)置函數(shù),用于調(diào)用父類的方法,此處調(diào)用確保父類中的初始化代碼正確執(zhí)行子類__init__()方法的參數(shù)列表常常要包含父類初始化所需的參數(shù)7.4.2擴展新特性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擴展新特性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點傷害示例7-13Python類與對象01020403封裝繼承多態(tài)目

錄多態(tài)04目

錄Python類與對象0102封裝03繼承Python多態(tài)實現(xiàn)7.5多態(tài)163多態(tài):繼承體系中,不同子類對父類的同名方法表現(xiàn)出不同行為同一繼承體系子類重新實現(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論