




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章面向?qū)ο缶幊獭禤ython程序設(shè)計(jì)任務(wù)驅(qū)動(dòng)教程》學(xué)習(xí)目標(biāo)/Target了解面向?qū)ο缶幊?,能夠說(shuō)出什么是面向?qū)ο缶幊?/p>
熟悉對(duì)象和類(lèi)的概念,能夠說(shuō)出對(duì)象和類(lèi)的關(guān)系
掌握類(lèi)的定義和對(duì)象的創(chuàng)建方式,能夠通過(guò)class定義類(lèi)并創(chuàng)建該類(lèi)的對(duì)象
掌握類(lèi)屬性,能夠在程序中訪(fǎng)問(wèn)和修改類(lèi)屬性
掌握實(shí)例方法的定義,能夠通過(guò)類(lèi)的對(duì)象調(diào)用定義的實(shí)例方法學(xué)習(xí)目標(biāo)/Target掌握實(shí)例屬性的基本使用,能夠訪(fǎng)問(wèn)、修改實(shí)例屬性和動(dòng)態(tài)添加實(shí)例屬性
掌握__init__()方法的使用,能夠在__init__()方法中定義實(shí)例屬性
掌握類(lèi)方法的定義與使用,能夠在類(lèi)中定義類(lèi)方法并使用
掌握靜態(tài)方法的定義與使用,能夠在類(lèi)中定義靜態(tài)方法并使用
掌握私有屬性和私有方法,能夠在類(lèi)中添加和使用私有屬性和私有方法學(xué)習(xí)目標(biāo)/Target熟悉封裝的特性,能夠?qū)崿F(xiàn)類(lèi)的封裝
掌握單繼承、多繼承的語(yǔ)法,能夠在類(lèi)中實(shí)現(xiàn)單繼承和多繼承
掌握重寫(xiě)的方式,能夠在子類(lèi)中實(shí)現(xiàn)父類(lèi)方法的重寫(xiě)
掌握super()函數(shù)的使用,能夠通過(guò)super()函數(shù)調(diào)用父類(lèi)中被重寫(xiě)的方法
熟悉多態(tài)的特性,能夠在程序中以多態(tài)的形式調(diào)用類(lèi)中定義的方法章節(jié)概述/Summary面向?qū)ο缶幊淌浅绦蜷_(kāi)發(fā)領(lǐng)域的重要思想,這種思想模擬了人類(lèi)認(rèn)識(shí)客觀(guān)世界的思維方式,將開(kāi)發(fā)中遇到的事物看作對(duì)象。Python支持面向?qū)ο缶幊蹋襊ython3.x版的Python源碼全部基于面向?qū)ο缶幊淘O(shè)計(jì),因此了解面向?qū)ο缶幊痰乃枷雽?duì)學(xué)習(xí)Python而言非常重要。本章通過(guò)4個(gè)任務(wù)對(duì)面向?qū)ο缶幊痰南嚓P(guān)知識(shí)進(jìn)行講解。目錄/Contents任務(wù)7-1航天器信息查詢(xún)工具任務(wù)7-2超市管理系統(tǒng)任務(wù)7-3考勤系統(tǒng)任務(wù)7-4人機(jī)猜拳游戲航天器信息查詢(xún)工具任務(wù)7-1任務(wù)描述名稱(chēng)發(fā)射時(shí)間簡(jiǎn)介
天問(wèn)一號(hào)2020年天問(wèn)一號(hào)是我國(guó)自行研制的探測(cè)器,負(fù)責(zé)執(zhí)行中國(guó)第一次自主火星探測(cè)任務(wù)長(zhǎng)征十一號(hào)海射運(yùn)載火箭2022年長(zhǎng)征十一號(hào)是我國(guó)自主研制的一型四級(jí)全固體運(yùn)載火箭。該火箭主要用于快速機(jī)動(dòng)發(fā)射應(yīng)急衛(wèi)星,滿(mǎn)足自然災(zāi)害、突發(fā)事件等應(yīng)急情況下微小衛(wèi)星發(fā)射需求長(zhǎng)征五號(hào)B運(yùn)載火箭2020年長(zhǎng)征五號(hào)B運(yùn)載火箭是專(zhuān)門(mén)為中國(guó)載人航天工程空間站建設(shè)研制的一型新型運(yùn)載火箭,以長(zhǎng)征五號(hào)火箭為基礎(chǔ)改進(jìn)而成,是中國(guó)近地軌道運(yùn)載能力最大的新一代運(yùn)載火箭航天器和火箭的簡(jiǎn)介信息任務(wù)描述【任務(wù)目標(biāo)】本任務(wù)要求編寫(xiě)代碼,設(shè)計(jì)一個(gè)輸入航天器和火箭名稱(chēng),便可查詢(xún)?cè)撁Q(chēng)對(duì)應(yīng)的發(fā)射時(shí)間和簡(jiǎn)介的查詢(xún)工具類(lèi),該工具類(lèi)具備以下內(nèi)容。(1)信息列表(2)查詢(xún)信息的功能請(qǐng)輸入查詢(xún)名稱(chēng):XXXX發(fā)射時(shí)間:XXXX
簡(jiǎn)介:XXXX知識(shí)儲(chǔ)備了解面向?qū)ο缶幊?,能夠說(shuō)出什么是面向?qū)ο缶幊虒W(xué)習(xí)目標(biāo)1.面向?qū)ο缶幊毯?jiǎn)介知識(shí)儲(chǔ)備1.面向?qū)ο缶幊毯?jiǎn)介面向過(guò)程編程一般會(huì)先分析解決問(wèn)題的步驟,使用函數(shù)實(shí)現(xiàn)每個(gè)步驟的功能,之后按步驟依次調(diào)用函數(shù)。面向過(guò)程編程面向?qū)ο缶幊虝?huì)先分析問(wèn)題,從中提煉出多個(gè)對(duì)象,將不同對(duì)象各自的特征和行為進(jìn)行封裝,之后通過(guò)控制對(duì)象的行為來(lái)解決問(wèn)題。面向?qū)ο缶幊讨R(shí)儲(chǔ)備1.面向?qū)ο缶幊毯?jiǎn)介玩家棋盤(pán)規(guī)則系統(tǒng)特征棋子(黑或白子)棋盤(pán)數(shù)據(jù)無(wú)
行為落子顯示棋盤(pán)、更新棋盤(pán)判定勝負(fù)五子棋游戲(面向過(guò)程編程)五子棋游戲(面向?qū)ο缶幊蹋┟嫦驅(qū)ο缶幊瘫WC了功能的統(tǒng)一性,基于面向?qū)ο缶幊虒?shí)現(xiàn)的程序更容易維護(hù)。知識(shí)儲(chǔ)備2.對(duì)象和類(lèi)熟悉對(duì)象和類(lèi)的概念,能夠說(shuō)出對(duì)象和類(lèi)的關(guān)系學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備2.對(duì)象和類(lèi)對(duì)象是構(gòu)成世界的一個(gè)獨(dú)立單位,它由數(shù)據(jù)(描述事物的特征)和作用于數(shù)據(jù)的操作(體現(xiàn)事物的行為)構(gòu)成一個(gè)獨(dú)立整體。對(duì)象忽略事物的非本質(zhì)特征,關(guān)注與目標(biāo)有關(guān)的本質(zhì)特征,找出事物間的共性,抽象出一個(gè)概念模型,就是定義一個(gè)類(lèi)。類(lèi)在面向?qū)ο缶幊讨?,?lèi)是具有相同特征和行為的一組對(duì)象的集合,它提供一個(gè)抽象的描述,其內(nèi)部包括特征和行為兩個(gè)主要部分,它就像一個(gè)模具,可以用它鑄造一個(gè)個(gè)具體的鑄件。知識(shí)儲(chǔ)備3.類(lèi)的定義掌握類(lèi)的定義方式,能夠通過(guò)class關(guān)鍵字定義類(lèi)學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備3.類(lèi)的定義Python中使用關(guān)鍵字class來(lái)定義一個(gè)類(lèi)。classStudent:
age=17
name='小明'
defstudy(self):
print('學(xué)習(xí)')class類(lèi)名:
屬性名=屬性值
def方法名(self):方法體語(yǔ)法格式知識(shí)儲(chǔ)備3.類(lèi)的定義Python中使用關(guān)鍵字class來(lái)定義一個(gè)類(lèi)。classStudent:
age=17
name='小明'
defstudy(self):
print('學(xué)習(xí)')class類(lèi)名:
屬性名=屬性值
def方法名(self):方法體語(yǔ)法格式屬性知識(shí)儲(chǔ)備3.類(lèi)的定義Python中使用關(guān)鍵字class來(lái)定義一個(gè)類(lèi)。classStudent:
age=17
name='小明'
defstudy(self):
print('學(xué)習(xí)')class類(lèi)名:
屬性名=屬性值
def方法名(self):方法體語(yǔ)法格式方法知識(shí)儲(chǔ)備4.對(duì)象的創(chuàng)建與使用掌握對(duì)象的創(chuàng)建方式,能夠創(chuàng)建對(duì)象并使用對(duì)象訪(fǎng)問(wèn)屬性或調(diào)用方法學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備4.對(duì)象的創(chuàng)建與使用類(lèi)定義完成后不能直接使用。這就好比畫(huà)好了一張房屋設(shè)計(jì)圖紙,此圖紙只能幫助人們了解房屋的結(jié)構(gòu),但不能提供居住場(chǎng)所。為滿(mǎn)足人們的居住需求,需要根據(jù)房屋設(shè)計(jì)圖紙搭建實(shí)際的房屋。同理,程序中的類(lèi)需要實(shí)例化為對(duì)象才能實(shí)現(xiàn)其意義。知識(shí)儲(chǔ)備4.對(duì)象的創(chuàng)建與使用(1)對(duì)象的創(chuàng)建student=Student()對(duì)象名=類(lèi)名()語(yǔ)法格式(2)對(duì)象的使用print(student.age)print()student.study()對(duì)象名.屬性名對(duì)象名.方法名(參數(shù)1,參數(shù)2,...)
語(yǔ)法格式知識(shí)儲(chǔ)備5.類(lèi)屬性掌握類(lèi)屬性,能夠在程序中訪(fǎng)問(wèn)和修改類(lèi)屬性學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備5.類(lèi)屬性類(lèi)屬性是定義在類(lèi)內(nèi)部、方法外部的屬性。例如,前面Student類(lèi)內(nèi)部定義的age和name都是類(lèi)屬性。(1)類(lèi)屬性的訪(fǎng)問(wèn)類(lèi)屬性是類(lèi)和對(duì)象所共有的屬性,它可以被類(lèi)訪(fǎng)問(wèn),也可以被類(lèi)實(shí)例化的所有對(duì)象訪(fǎng)問(wèn)。student=Student()print(student.age)print(Student.age)示例知識(shí)儲(chǔ)備5.類(lèi)屬性(2)類(lèi)屬性的修改類(lèi)屬性可以通過(guò)類(lèi)或?qū)ο筮M(jìn)行訪(fǎng)問(wèn),但只能通過(guò)類(lèi)進(jìn)行修改。student=Student()print(Student.age)print(student.age)Student.age=18print(Student.age)print(student.age)student.age=19print(Student.age)print(student.age)示例知識(shí)儲(chǔ)備6.實(shí)例方法掌握實(shí)例方法的定義,能夠通過(guò)類(lèi)的對(duì)象調(diào)用定義的實(shí)例方法學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備6.實(shí)例方法實(shí)例方法形似函數(shù),它定義在類(lèi)內(nèi)部。第1個(gè)參數(shù)是self,表示對(duì)象本身。當(dāng)調(diào)用實(shí)例方法時(shí),self會(huì)自動(dòng)接收由系統(tǒng)傳遞的調(diào)用該方法的對(duì)象。實(shí)例方法只能通過(guò)對(duì)象調(diào)用。classDemo:
deffunction(self):
print("我是實(shí)例方法")demo=Demo()demo.function()
#正確的調(diào)用方式Demo.function()
#錯(cuò)誤的調(diào)用方式示例知識(shí)儲(chǔ)備6.實(shí)例方法一個(gè)類(lèi)中可以定義多個(gè)實(shí)例方法,當(dāng)在實(shí)例方法中調(diào)用其他實(shí)例方法時(shí),需要以“self.實(shí)例方法名”的形式調(diào)用。classDemo:
deffunction(self):
print("我是實(shí)例方法")
deffunction2(self):
self.function()
#在實(shí)例方法中調(diào)用其他實(shí)例方法demo=Demo()demo.function2()示例任務(wù)分析本任務(wù)需要設(shè)計(jì)一個(gè)查詢(xún)信息類(lèi),該類(lèi)可以命名為SearchEngine,同時(shí)根據(jù)任務(wù)描述設(shè)計(jì)出SearchEngine類(lèi)的類(lèi)圖。任務(wù)分析實(shí)現(xiàn)思路類(lèi)屬性分析info用于存儲(chǔ)航天器和火箭的名稱(chēng)、發(fā)射時(shí)間和簡(jiǎn)介信息。定義一個(gè)包含北斗衛(wèi)星導(dǎo)航系統(tǒng)等相關(guān)信息的列表。方法分析接收用戶(hù)輸入的查詢(xún)名稱(chēng)。通過(guò)for語(yǔ)句遍歷信息列表。通過(guò)for語(yǔ)句遍歷字典的方式取出查詢(xún)的具體信息。按照固定的格式輸出查詢(xún)的信息。任務(wù)實(shí)現(xiàn)1.創(chuàng)建項(xiàng)目Chapter07及01_spacecraft.py文件。2.在01_spacecraft.py文件中編寫(xiě)代碼。根據(jù)類(lèi)圖定義SearchEngine類(lèi)。創(chuàng)建SearchEngine類(lèi)的對(duì)象并調(diào)用方法search_info()。3.運(yùn)行01_spacecraft.py文件。實(shí)現(xiàn)步驟超市管理系統(tǒng)任務(wù)7-2任務(wù)描述目前很多超市都引入了超市管理系統(tǒng),超市工作人員利用計(jì)算機(jī),可以很方便的對(duì)超市的相關(guān)商品進(jìn)行添加、修改、查看等操作。超市管理系統(tǒng)任務(wù)描述【任務(wù)目標(biāo)】本任務(wù)要求基于面向?qū)ο缶幊痰乃枷刖帉?xiě)程序,實(shí)現(xiàn)具有以上功能的超市管理系統(tǒng)。知識(shí)儲(chǔ)備1.實(shí)例屬性掌握實(shí)例屬性的基本使用,能夠訪(fǎng)問(wèn)、修改實(shí)例屬性和動(dòng)態(tài)添加實(shí)例屬性學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備1.實(shí)例屬性通過(guò)“self.變量名”定義的屬性稱(chēng)為實(shí)例屬性,實(shí)例屬性通常定義在類(lèi)的__init__()方法(將在7.2.2節(jié)詳細(xì)介紹)中,也可以定義在其他方法中。另外,Python支持動(dòng)態(tài)添加實(shí)例屬性。classDog:
defdog_name(self):
='Buddy’示例dog=Dog()dog.dog_name()print()
#正確的方式print(D)
#錯(cuò)誤的方式(1)訪(fǎng)問(wèn)實(shí)例屬性實(shí)例屬性只能通過(guò)對(duì)象進(jìn)行訪(fǎng)問(wèn)。知識(shí)儲(chǔ)備1.實(shí)例屬性通過(guò)“self.變量名”定義的屬性稱(chēng)為實(shí)例屬性,實(shí)例屬性通常定義在類(lèi)的__init__()方法(將在7.2.2節(jié)詳細(xì)介紹)中,也可以定義在其他方法中。另外,Python支持動(dòng)態(tài)添加實(shí)例屬性。classDog:
defdog_name(self):
='Buddy’示例dog=Dog()dog.dog_name()
print()
='candy’#修改實(shí)例屬性
print()(2)修改實(shí)例屬性實(shí)例屬性通過(guò)對(duì)象進(jìn)行修改。知識(shí)儲(chǔ)備1.實(shí)例屬性通過(guò)“self.變量名”定義的屬性稱(chēng)為實(shí)例屬性,實(shí)例屬性通常定義在類(lèi)的__init__()方法(將在7.2.2節(jié)詳細(xì)介紹)中,也可以定義在其他方法中。另外,Python支持動(dòng)態(tài)添加實(shí)例屬性。classDog:
defdog_name(self):
='Buddy’示例dog=Dog()……dog.age=3#動(dòng)態(tài)添加實(shí)例屬性print(dog.age)(3)動(dòng)態(tài)添加實(shí)例屬性Python支持在類(lèi)的外部使用對(duì)象動(dòng)態(tài)地添加實(shí)例屬性。知識(shí)儲(chǔ)備2.__init__()方法掌握__init__()方法的使用,能夠在__init__()方法中定義實(shí)例屬性學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備2.__init__()方法每個(gè)類(lèi)都有一個(gè)默認(rèn)的構(gòu)造方法__init__(),該方法負(fù)責(zé)在創(chuàng)建對(duì)象時(shí)對(duì)對(duì)象進(jìn)行初始化。如果在定義類(lèi)時(shí)顯式地定義了__init__()方法,則創(chuàng)建對(duì)象時(shí)Python解釋器會(huì)調(diào)用顯式定義的__init__()方法。如果定義類(lèi)時(shí)沒(méi)有顯式定義__init__()方法,那么Python解釋器會(huì)調(diào)用默認(rèn)的__init__()方法。知識(shí)儲(chǔ)備2.__init__()方法__init__()方法按照參數(shù)的有無(wú)(self除外)可分為有參構(gòu)造方法和無(wú)參構(gòu)造方法。當(dāng)使用無(wú)參構(gòu)造方法創(chuàng)建對(duì)象時(shí),所有對(duì)象的同一屬性都有相同的初始值。當(dāng)使用有參構(gòu)造方法創(chuàng)建對(duì)象時(shí),所有對(duì)象的同一屬性可以有不同的初始值。classCar:
def__init__(self):
self.color="紅色"
defdrive(self):
print(f"車(chē)的顏色:{self.color}")無(wú)參構(gòu)造方法classCar:
def__init__(self,color):
self.color=color
defdrive(self):
print(f"車(chē)的顏色:{self.color}")有參構(gòu)造方法知識(shí)儲(chǔ)備3.類(lèi)方法掌握類(lèi)方法的定義與使用,能夠在類(lèi)中定義類(lèi)方法并使用學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備3.類(lèi)方法classCar:
@classmethod
defstop(cls):
print("我是類(lèi)方法")示例@classmethod
def類(lèi)方法名(cls):方法體語(yǔ)法格式類(lèi)方法是定義在類(lèi)內(nèi)部、使用裝飾器@classmethod修飾的方法。知識(shí)儲(chǔ)備3.類(lèi)方法car=Car()
car.stop()Car.stop()示例類(lèi)方法可以通過(guò)類(lèi)和對(duì)象調(diào)用。classCar:
wheels=3
@classmethod
defstop(cls):
print(cls.wheels)
cls.wheels=4
print(cls.wheels)示例使用cls訪(fǎng)問(wèn)和修改類(lèi)屬性的值。知識(shí)儲(chǔ)備4.靜態(tài)方法
掌握靜態(tài)方法的定義與使用,能夠在類(lèi)中定義靜態(tài)方法并使用學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備4.靜態(tài)方法classCar:
@staticmethod
deftest():
print("我是靜態(tài)方法")
示例class類(lèi)名:@staticmethoddef靜態(tài)方法名():
方法體語(yǔ)法格式靜態(tài)方法是定義在類(lèi)內(nèi)部、使用裝飾器@staticmethod修飾的方法。知識(shí)儲(chǔ)備4.靜態(tài)方法car=Car()
car.test()Car.test()示例靜態(tài)方法可以通過(guò)類(lèi)和對(duì)象調(diào)用。classCar:
wheels=3
@staticmethod
deftest():
print("我是靜態(tài)方法")
print(f"類(lèi)屬性的值為
{Car.wheels}")car=Car()car.test()示例靜態(tài)方法內(nèi)部不能直接訪(fǎng)問(wèn)屬性或調(diào)用方法,但可以使用類(lèi)名訪(fǎng)問(wèn)類(lèi)屬性或調(diào)用類(lèi)方法。任務(wù)分析本任務(wù)需要設(shè)計(jì)一個(gè)代表超市管理系統(tǒng)的類(lèi),該類(lèi)被命名為MarketManage,同時(shí)根據(jù)任務(wù)描述中超市管理系統(tǒng)的功能設(shè)計(jì)出MarketManage類(lèi)的類(lèi)圖。任務(wù)分析實(shí)現(xiàn)思路屬性分析屬性u(píng)sername和password的初始值分別為admin和12345。屬性goods_info表示商品數(shù)據(jù)列表。方法分析function_display()方法用于展示功能選項(xiàng)。login()方法用于實(shí)現(xiàn)用戶(hù)登錄操作。show_goods()方法用于向用戶(hù)展示超市管理系統(tǒng)中所有的商品數(shù)據(jù)。add_goods()方法用于向超市管理系統(tǒng)中添加商品數(shù)據(jù)。任務(wù)分析實(shí)現(xiàn)思路②方法分析modify_goods()方法用于修改超市管理系統(tǒng)中的商品數(shù)據(jù)。statistics()方法用于將超市管理系統(tǒng)中所有商品數(shù)據(jù)按照銷(xiāo)量從高到低進(jìn)行排序。modify_pwd()方法用于修改超市管理系統(tǒng)的初始用戶(hù)名和密碼。main()方法作為程序的入口,用于調(diào)用超市管理系統(tǒng)的各個(gè)功能。
任務(wù)實(shí)現(xiàn)1.在Chapter07項(xiàng)目中創(chuàng)建02_MarketManage.py文件。2.在02_MarketManage.py文件中編寫(xiě)代碼。定義MarketManage類(lèi),在該類(lèi)中定義屬性。定義function_display()方法。定義login()方法。定義show_goods()方法。定義add_goods()方法。定義modify_goods()方法。定義statistics()方法。定義modify_pwd()方法。定義main()方法。創(chuàng)建MarketManage類(lèi)的對(duì)象調(diào)用實(shí)例方法main()。
3.運(yùn)行02_MarketManage.py文件。實(shí)現(xiàn)步驟考勤系統(tǒng)任務(wù)7-3任務(wù)描述考勤系統(tǒng)用于管理公司員工的上下班考勤,根據(jù)員工的考勤記錄發(fā)放相應(yīng)的薪資,該系統(tǒng)會(huì)記錄員工的簽到時(shí)間、簽退時(shí)間和考勤記錄??记谙到y(tǒng)任務(wù)描述【任務(wù)目標(biāo)】本任務(wù)要求基于面向?qū)ο缶幊痰乃枷刖帉?xiě)程序,實(shí)現(xiàn)具備以上功能的考勤系統(tǒng)。知識(shí)儲(chǔ)備1.私有成員掌握私有屬性和私有方法,能夠在類(lèi)中添加和使用私有屬性和私有方法學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備1.私有成員類(lèi)的成員(包括前面介紹的屬性和方法)默認(rèn)是類(lèi)的公有成員,它們可以在類(lèi)的外部通過(guò)類(lèi)或?qū)ο箅S意地訪(fǎng)問(wèn),若類(lèi)中包含一些核心數(shù)據(jù),這樣顯然不夠安全。為了保證類(lèi)中數(shù)據(jù)的安全,Python支持定義私有成員,這種方式在一定程度上限制外部對(duì)類(lèi)成員的訪(fǎng)問(wèn)。Python中的私有成員包括私有屬性和私有方法。
知識(shí)儲(chǔ)備1.私有成員(1)私有屬性Python中通過(guò)在屬性名稱(chēng)的前面添加雙下畫(huà)線(xiàn)“_
_”的方式來(lái)表示私有屬性。私有屬性在類(lèi)的內(nèi)部可以直接訪(fǎng)問(wèn),在類(lèi)的外部不能直接訪(fǎng)問(wèn),但可以通過(guò)調(diào)用類(lèi)的公有方法的方式進(jìn)行訪(fǎng)問(wèn)。classCar:
__wheels=4
def__init__(self):
self.__brand='大眾‘
defcar_info(self):
print(self.__brand)
print(Car.__wheels)示例car=Car()print(car.__wheels)
print(car.__brand)car.car_info()程序運(yùn)行這兩行代碼會(huì)出現(xiàn)錯(cuò)誤,說(shuō)明類(lèi)外部無(wú)法直接訪(fǎng)問(wèn)類(lèi)內(nèi)部的私有屬性知識(shí)儲(chǔ)備1.私有成員(2)私有方法Python中通過(guò)在方法名稱(chēng)的前面添加雙下畫(huà)線(xiàn)“__”的方式來(lái)表示私有方法。私有方法只能在類(lèi)的內(nèi)部使用,無(wú)法在類(lèi)外部使用。classCar:
__wheels=4
def__init__(self):
self.__brand='大眾'
def__data(self):
print('內(nèi)部數(shù)據(jù)')
defcar_info(self):
print(self.__brand)
print(Car.__wheels)
self.__data()示例car=Car()car.__data()car.car_info()
程序運(yùn)行這一行代碼會(huì)出現(xiàn)錯(cuò)誤,說(shuō)明類(lèi)外部無(wú)法訪(fǎng)問(wèn)類(lèi)內(nèi)部的私有方法知識(shí)儲(chǔ)備2.封裝熟悉封裝的特性,能夠?qū)崿F(xiàn)類(lèi)的封裝
學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備2.封裝封裝是面向?qū)ο缶幊痰闹匾匦灾唬幕舅枷胧菍?duì)外隱藏類(lèi)的細(xì)節(jié),提供用于訪(fǎng)問(wèn)類(lèi)成員的公開(kāi)接口。如此,類(lèi)的外部無(wú)須知道類(lèi)的實(shí)現(xiàn)細(xì)節(jié),只需要使用公開(kāi)接口便可訪(fǎng)問(wèn)類(lèi)的內(nèi)容,這在一定程度上保證了類(lèi)內(nèi)數(shù)據(jù)的安全。知識(shí)儲(chǔ)備2.封裝為了契合封裝思想,在定義類(lèi)時(shí)需要滿(mǎn)足以下兩點(diǎn)要求。(1)將屬性聲明為私有屬性。(2)添加兩個(gè)供外界調(diào)用的公有方法,分別用于設(shè)置或獲取私有屬性的值。知識(shí)儲(chǔ)備2.封裝classPerson:
def__init__(self,name):
=name
self.__age=1
defset_age(self,new_age):
if0<new_age<=120:
self.__age=new_age
defget_age(self):
returnself.__age
示例person=Person("小明")person.set_age(20)
print(f"年齡為{person.get_age()}歲")任務(wù)分析本任務(wù)需要基于面向?qū)ο缶幊痰乃枷雽?shí)現(xiàn)考勤系統(tǒng),我們可以設(shè)計(jì)一個(gè)代表考勤系統(tǒng)的WorkAttendance類(lèi),設(shè)計(jì)WorkAttendance類(lèi)的類(lèi)圖。任務(wù)分析實(shí)現(xiàn)思路屬性分析__sign_in、__sign_out、__info都被定義為私有屬性屬性__info表示員工信息列表,該列表的格式如下。
[{'姓名':'張三','工號(hào)':'001','簽到時(shí)間':XXXX,'簽退時(shí)間':XXXX},{'姓名':'李四','工號(hào)':'002','簽到時(shí)間':XXXX,'簽退時(shí)間':XXXX}]任務(wù)分析實(shí)現(xiàn)思路方法分析function_display)方法僅用于展示考勤系統(tǒng)所包含的功能,因此可將該功能定義為靜態(tài)方法。__sign_in_or_out()方法用于實(shí)現(xiàn)員工簽到和簽退功能。attendance()方法用于展示員工簽到時(shí)間和簽退時(shí)間。main()方法作為程序的入口,用于調(diào)用考勤系統(tǒng)的各個(gè)功能。任務(wù)實(shí)現(xiàn)1.在Chapter07項(xiàng)目中創(chuàng)建03_work_attendance.py文件。2.在03_work_attendance.py文件中編寫(xiě)代碼。定義考勤系統(tǒng)類(lèi)WorkAttendance,在該類(lèi)中定義私有屬性。在WorkAttendance類(lèi)中定義靜態(tài)方法function_display()。在WorkAttendance類(lèi)中定義__sign_in_or_out()方法。在WorkAttendance類(lèi)中定義attendance()方法。在WorkAttendance類(lèi)中定義main()方法。創(chuàng)建WorkAttendance類(lèi)的對(duì)象調(diào)用main()方法。3.運(yùn)行03_work_attendance.py文件。實(shí)現(xiàn)步驟人機(jī)猜拳游戲任務(wù)7-4任務(wù)描述在人機(jī)猜拳游戲中包含兩個(gè)角色,一是計(jì)算機(jī),二是玩家。計(jì)算機(jī)猜拳的手勢(shì)由計(jì)算機(jī)隨機(jī)決定,玩家猜拳的手勢(shì)由玩家決定。本任務(wù)要求編寫(xiě)程序,完成符合上述規(guī)則的人機(jī)猜拳游戲?!救蝿?wù)目標(biāo)】知識(shí)儲(chǔ)備1.單繼承掌握單繼承的語(yǔ)法,能夠在類(lèi)中實(shí)現(xiàn)單繼承學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備1.單繼承繼承是面向?qū)ο缶幊痰闹匾匦灾?,它主要用于描述?lèi)與類(lèi)之間的關(guān)系,在不改變?cè)蓄?lèi)的基礎(chǔ)上擴(kuò)展原有類(lèi)的功能。若類(lèi)與類(lèi)之間具有繼承關(guān)系,被繼承的類(lèi)稱(chēng)為父類(lèi)或基類(lèi),繼承其他類(lèi)的類(lèi)稱(chēng)為子類(lèi)或派生類(lèi),子類(lèi)會(huì)自動(dòng)擁有父類(lèi)的公有成員。知識(shí)儲(chǔ)備1.單繼承單繼承即子類(lèi)只繼承一個(gè)父類(lèi)?,F(xiàn)實(shí)生活中,波斯貓、折耳貓、短毛貓都屬于貓類(lèi),它們之間存在的繼承關(guān)系即為單繼承。知識(shí)儲(chǔ)備1.單繼承Python中單繼承的語(yǔ)法格式如下所示。class子類(lèi)名(父類(lèi)名):語(yǔ)法格式classCat(object):
def__init__(self,color):
self.color=color
defcry(self):
print("喵喵叫~")classScottishFold(Cat):
pass示例fold=ScottishFold("灰色")print(f"{fold.color}的折耳貓")fold.cry()知識(shí)儲(chǔ)備1.單繼承子類(lèi)不會(huì)擁有父類(lèi)的私有成員,也不能訪(fǎng)問(wèn)父類(lèi)的私有成員。classCat(object):
def__init__(self,color):
self.color=color
self.__age=1
defwalk(self):
print("走貓步~")
def__test(self):
print("父類(lèi)的私有方法")示例print(fold.__age)fold.__test()程序運(yùn)行這兩行代碼會(huì)出現(xiàn)錯(cuò)誤,說(shuō)明子類(lèi)繼承父類(lèi)后不會(huì)擁有父類(lèi)的私有成員知識(shí)儲(chǔ)備2.多繼承掌握多繼承的語(yǔ)法,能夠在類(lèi)中實(shí)現(xiàn)多繼承學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備2.多繼承現(xiàn)實(shí)生活中很多事物是多個(gè)事物的組合,它們同時(shí)具有多個(gè)事物的特征或行為。比如沙發(fā)床是沙發(fā)與床的組合,既可以折疊成沙發(fā)的形狀,也可以展開(kāi)成床的形狀。房車(chē)是房屋和汽車(chē)的組合,既具有房屋的居住功能,也具有汽車(chē)的行駛功能。知識(shí)儲(chǔ)備2.多繼承程序中的一個(gè)類(lèi)也可以繼承多個(gè)類(lèi),如此子類(lèi)具有多個(gè)父類(lèi),也自動(dòng)擁有所有父類(lèi)的公有成員。class子類(lèi)名(父類(lèi)名1,父類(lèi)名2,...):語(yǔ)法格式classHouse(object):
deflive(self):
print("提供居住功能")classCar(object):
defdrive(self):
print("提供行駛功能")classTouringCar(House,Car):
pass示例tour_car=TouringCar()tour_car.live()tour_car.drive()知識(shí)儲(chǔ)備2.多繼承試想一下,如果House類(lèi)和Car類(lèi)中有一個(gè)同名的方法,那么子類(lèi)會(huì)調(diào)用哪個(gè)父類(lèi)的同名方法呢?知識(shí)儲(chǔ)備2.多繼承classHouse(object):
deflive(self):
print("提供居住功能")
deftest(self):
print("House類(lèi)測(cè)試")House類(lèi)classCar(object):
defdrive(self):
print("提供行駛功能")
deftest(self):
print("Car類(lèi)測(cè)試")Car類(lèi)tour_car=TouringCar()tour_car.live()tour_car.drive()tour_car.test()main示例如果子類(lèi)繼承的多個(gè)父類(lèi)是平行關(guān)系的類(lèi),那么子類(lèi)先繼承哪個(gè)類(lèi),便會(huì)先調(diào)用哪個(gè)類(lèi)的方法。知識(shí)儲(chǔ)備3.重寫(xiě)
掌握重寫(xiě)的方式,能夠在子類(lèi)中實(shí)現(xiàn)父類(lèi)方法的重寫(xiě)學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備3.重寫(xiě)Python中實(shí)現(xiàn)方法重寫(xiě)的方式非常簡(jiǎn)單,只要在子類(lèi)中定義與父類(lèi)方法同名的方法,在方法中按照子類(lèi)需求重新編寫(xiě)功能代碼即可。classFelines:
defspeciality(self):
print("貓科動(dòng)物特長(zhǎng)是爬樹(shù)")classCat(Felines):
name=“貓”
defspeciality(self):
print(f'{}會(huì)抓老鼠')
print(f'{}會(huì)爬樹(shù)')示例cat=Cat()cat.speciality()知識(shí)儲(chǔ)備4.super()函數(shù)掌握super()函數(shù)的使用,能夠通過(guò)super()函數(shù)調(diào)用父類(lèi)中被重寫(xiě)的方法學(xué)習(xí)目標(biāo)知識(shí)儲(chǔ)備4.super()函數(shù)如果子類(lèi)重寫(xiě)了父類(lèi)的方法,仍希望調(diào)用父類(lèi)中的同名方法,該如何實(shí)現(xiàn)呢?知識(shí)儲(chǔ)備4.super()函數(shù)Python中提供了一個(gè)super()函數(shù),該函數(shù)可以調(diào)用父類(lèi)中被重寫(xiě)的方法。classCat(Felines):
name="貓"
defspecial
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省成都市溫江區(qū)2023-2024學(xué)年五年級(jí)下學(xué)期語(yǔ)文期末試卷(含答案)
- 2025建筑工地材料裝卸合同
- 2025上海市物業(yè)管理服務(wù)合同
- 2025家具購(gòu)買(mǎi)合同書(shū)模板
- 2025標(biāo)準(zhǔn)中介版房屋租賃合同樣本
- 2025合作協(xié)議:土地項(xiàng)目共同開(kāi)發(fā)合同
- 2025關(guān)于地暖系統(tǒng)安裝合同書(shū)
- 2025銷(xiāo)售行業(yè)簡(jiǎn)易勞動(dòng)合同(參考文本)
- 2025國(guó)內(nèi)勞務(wù)合同(5)范文
- 《青少年骨折與關(guān)節(jié)損傷》課件
- 鉆機(jī)培訓(xùn)課件
- 2025勞動(dòng)合同書(shū)(版)
- 043-整體式汽車(chē)驅(qū)動(dòng)橋殼體振動(dòng)噪聲優(yōu)化數(shù)值研究
- 新建監(jiān)控系統(tǒng)項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 近五年(2018-2022年)數(shù)學(xué)高考真題分類(lèi)匯編10:統(tǒng)計(jì)概率(含答案+解析)
- T-GXAS 530-2023 桑螟防治技術(shù)規(guī)程
- 《智能建造技術(shù)與裝備》 課件 第一章 緒論
- 國(guó)開(kāi)2024年秋中國(guó)建筑史(本)終考任務(wù)答案
- 湖北公務(wù)員面試模擬28
- 華為戰(zhàn)略解碼解讀
- 莊子課件完整版本
評(píng)論
0/150
提交評(píng)論