python面向對象概念與練習試題_第1頁
python面向對象概念與練習試題_第2頁
python面向對象概念與練習試題_第3頁
python面向對象概念與練習試題_第4頁
python面向對象概念與練習試題_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、面向對象及練習題1. 面向對象1.1面向對象概念面向對象是一種編程思想,是對現(xiàn)實世界中的事物進行抽象的方式。應用到代碼編程設計中,是一種建立現(xiàn)實世界事物模型的方式。1.2 面向對象和面向過程區(qū)別面向過程關注的是完成工作的步驟,面向對象關注的是誰能完成工作。面向對象是在完成工作的時候關注哪些個體能夠完成對應的工作,找到對應的個體即可完成對應任務。2. 類2.1類的概念類是一系列事物的統(tǒng)稱,同類事物必定具有相同的特征。日常事物的特征根據(jù)特性分為狀態(tài)和行為,對應到類中是變量和方法。特征分類:狀態(tài) à 變量(成員變量)行為 à 方法(成員方法) 統(tǒng)稱:類的成員2.2類定義語法格式c

2、lass 類名: pass說明:pass是空語句,不具有任何意義,僅為了保持程序結構完整性2.3類名的命名規(guī)則類名命名規(guī)范:滿足大駝峰命名規(guī)則3. 對象3.1對象的概念對象是類的具體表現(xiàn)形式,是實際存在的個體。(類是一系列事物的統(tǒng)稱)3.2創(chuàng)建對象語法格式對象名 = 類名()3.3 注意事項對象的創(chuàng)建不限制數(shù)量,一個類可以創(chuàng)建任意個數(shù)的對象4. 成員變量4.1成員變量的概念成員變量用于描述對象的固有狀態(tài)或屬性。4.2定義成員變量語法格式(公有屬性/公有變量)class 類名: def _init_(self):self.變量名1 = 值1self.變量名2 = None4.3成員變量定義語法格

3、式(獨有屬性/獨有變量)對象名.變量名 = 值4.4公有變量與獨有變量的區(qū)別l 公有變量在_init_方法中聲明,每個對象都具有該變量l 獨有變量在創(chuàng)建對象后聲明,只有當前對象具有此變量l 定義對象的獨有變量時,如果獨有變量名與公有變量名相同,視為修改公有變量的值;如果獨有變量名與公有變量名不相同,視為定義新的獨有屬性l None含義是為空,表示沒有具體的數(shù)據(jù)4.5變量的調(diào)用格式取值:對象名.變量名賦值:對象名.變量名 = 值5. 成員方法5.1成員方法概念成員方法用于描述對象的固有行為5.2定義成員方法語法格式格式一(無參方法):class 類名: def 方法名(self):方法體格式二(

4、有參方法)class 類名: def 方法名(self,形參1,形參2,):方法體5.3調(diào)用成員方法語法格式格式一(調(diào)用無參方法): 對象名.方法名()格式二(調(diào)用有參方法): 對象名.方法名(實參1,實參2,)6. _init_方法6.1_init_方法的作用_init_方法,也稱為構造方法,創(chuàng)建對象時為對象初始化成員變量6.2定義_init_方法語法格式格式一:def _init_(self):self.變量名1 = 值1格式二:def _init_(self,形參1,形參2,):self._屬性名1 = 形參1self._屬性名2 = 形參26.3_init_方法調(diào)用和執(zhí)行l(wèi) _init

5、_方法在創(chuàng)建對象時被運行,無需手工調(diào)用即可執(zhí)行l(wèi) _init_方法中如果有形參,在創(chuàng)建對象時需要傳遞對應的實參6.4魔術方法魔術方法是在類中聲明、定義的方法,執(zhí)行時無需手工調(diào)用,自動執(zhí)行。7. _str_方法7.1_str_方法的作用_str_方法是在使用print函數(shù)打印輸出對象到屏幕時被調(diào)用的方法,用于返回對象的規(guī)范化字符串表現(xiàn)形式7.2定義_str_方法語法格式def _str_(self):return 打印對象是顯示的信息8. 成員方法調(diào)用類成員8.1成員方法中調(diào)用成員變量語法格式self.變量名8.2成員方法中調(diào)用成員方法語法格式self.方法名(實參1,實參2,)8.3 self

6、 self僅出現(xiàn)在成員方法中,指代執(zhí)行該方法的對象。9.封裝9.1封裝的作用封裝操作可以對受訪問保護的成員進行功能開放的控制,達到保護數(shù)據(jù)不被非法訪問的目的9.2定義私有變量語法格式self._屬性名 = 值9.3定義私有方法語法格式def _方法名(self,形參1,形參2,):方法體9.4 標準封裝語法格式變量私有化格式:self._屬性名 = 值提供公共的訪問器格式:def get_屬性名(self):return self._屬性名提供公共的修改器格式:def set_屬性名(self,屬性名):self._屬性名 = 屬性名10.類變量10.1類變量的概念類變量是定義在類中,不屬于某

7、個具體對象的特征,被所有對象共同使用的特征10.2定義類變量語法格式class 類名:變量名 = 值10.3調(diào)用類變量語法格式賦值格式:類名.類變量名 = 值取值格式:類名.類變量名(推薦)對象名.類變量名(不推薦)10.4注意事項l 類變量推薦使用類名取值訪問,也可以使用對象名取值訪問l 類變量只能通過類名修改;使用對象名調(diào)用類變量修改類變量的值時會創(chuàng)建新的對象獨有變量;如果此時對象具有同名對象變量,則修改對應的變量值l 類變量可以私有化11.類方法11.1類方法的概念類方法是定義在類中,不屬于某個具體對象的行為,被所有對象共同使用的行為11.2定義類方法基本語法class 類名:class

8、methoddef 方法名(cls, 形參1,形參2,):方法體11.3調(diào)用類方法語法格式類名.類方法名(實參1,實參2,) (推薦)對象名.類方法名(實參1,實參2,) (不推薦)11.4注意事項l 類方法中不允許使用實例變量和實例方法l 類方法中允許使用類變量和類方法,通過第一個參數(shù)cls進行l(wèi) 實例方法中允許使用類變量和類方法12.靜態(tài)方法12.1定義靜態(tài)方法語法格式class 類名:staticmethoddef 方法名(形參1,形參2,):方法體 12.2調(diào)用靜態(tài)方法語法格式類名.靜態(tài)方法名(實參1,實參2,) (推薦)對象名.靜態(tài)方法名(實參1,實參2,) (不推薦)12.3各種方

9、法定義規(guī)則l 只訪問成員變量的方法,定義成實例方法l 只訪問類變量的方法,定義類方法l 既訪問成員變量,也訪問類變量的方法,定義成實例方法l 既不訪問成員變量,也不訪問類變量,定義成靜態(tài)方法練習題1概念理解要求:1. 如何理解面向對象編程(OOP)2. 什么是類,什么是對象提示:1. 類和對象有兩個層面的含義:類是對一類具體的事物的抽象的概括,具有相似內(nèi)部狀態(tài)和運動規(guī)律的實體的集合,具有相同屬性和行為事物的統(tǒng)稱,是抽象的;對象是一個具體的事物,在現(xiàn)實世界中可以是看得見摸得著的,可以直接使用的2. 擁有相同(或者類似)屬性和行為的對象都可以抽像出一個類練習題2定義類、創(chuàng)建對象要求:1. pyth

10、on中如何定義一個類 class 類名:     方法. class Test:     def test(self):         pass2. 類(class)由哪三個部分構成 類的名稱、類的屬性、類的方法3. 類名的命名規(guī)則是什么 大駝峰命名法4. python中如何通過類創(chuàng)建對象,請用代碼進行說明 # 創(chuàng)建對象 # 對象名 = 類名() class Human:   # 定義類     pass man = Human()   # 創(chuàng)建對象5. 如何在類中定義一個

11、方法,請用代碼進行說明 class Human:     # 定義run方法     def run(self):         print("正在奔跑")6. 定義一個People類,使用People類,創(chuàng)建一個mayun對象后,添加company屬性,值是"阿里巴巴";創(chuàng)建一個wangjianling對象,添加company屬性,值是"萬達集團" class People:     pass mayun = People() &#

12、160; # 創(chuàng)建mayun對象 pany = "阿里巴巴"   # 為對象添加屬性 wangjianlin = People()   # 創(chuàng)建wangjianlin對象 pany = "萬達集團"7. 定義一個水果類,然后通過水果類,創(chuàng)建蘋果對象、橘子對象、西瓜對象并分別添加上顏色屬性 class Fruit:     pass apple = Fruit() apple.color = "紅色" orange = Fruit() orange.color = "橙色" w

13、atermelon = Fruit() watermelon = "綠色"8. 定義一個汽車類,并在類中定義一個move方法,然后分別創(chuàng)建BMW_X9、AUDI_A9對象,并添加顏色、馬力、型號等屬性,然后分別打印出屬性值、調(diào)用move方法 class Car:     def move(self):         print("汽車正在移動") BMW_X9 = Car() BMW_X9.color = "白色" BMW_X9.horsepower = "300

14、" BMW_X9.model = "X9" BMW_X9.move() print("這輛%s %s的馬力是%s匹"%(BMW_X9.color,BMW_X9.model,BMW_X9.horsepower) AUDI_A9 = Car() AUDI_A9.color = "黑色" AUDI_A9.horsepower = "320" AUDI_A9.model = "A9" AUDI_A9.move() print("這輛%s %s的馬力是%s匹"%(AUDI_A

15、9.color, AUDI_A9.model, AUDI_A9.horsepower)提示:1. 可以在通過類創(chuàng)建出對象后,再為對象添加屬性:對象名.屬性名 = 值 的方式添加2. 調(diào)用對象的方法和調(diào)用普通函數(shù)的一樣,使用()來實現(xiàn)調(diào)用,只不過調(diào)用方法需要使用:對象名.方法名()來進行調(diào)用練習題3要求:_init_方法、_str_方法、self1. _init_方法有什么作用,如何定義 當使用類名()的方法去創(chuàng)建對象的時候 python解釋器會自動調(diào)用_init_方法 因此可以在_init_方法中做一些初始化的設定 在每次創(chuàng)建新對象時,都自動完成這些初始化的設定 class Human: &#

16、160;   def _init_(self):   # 注意名字不能寫錯,否則就只是一個普通的方法         pass2. _str_方法有什么作用,使用時應注意什么問題 如果類中定義了_str_方法,那么當使用print打印對象時,打印出的信息是 _str_方法的返回值 注意點: _str_方法必須有返回值,且必須返回一個字符串類型的值3. 方法中的"self"代表什么 類中定義的許多方法,除了之后會提到的類方法和靜態(tài)方法以外,其他任何的方法 當被對象調(diào)用時,python解釋器都會把這個對象作為這個方法的

17、第一個參數(shù)傳入 所以定義這些方法時,必須寫上第一個參數(shù),往往寫成self去接收 因此在這些方法中,self就可以直接被當做當前對象來使用4. 在類中定義_init_和_str_方法時,必須提供形參嗎,第一個形參又必須是self嗎?為什么? 同上 但這個參數(shù)名可以寫成別的,但往往寫成self,便于編寫程序的人區(qū)分提示:1. _init_方法可以在創(chuàng)建對象時,為對象實現(xiàn)一些初始化的操作,提供一些默認屬性2. _str_方法可以在使用print打印對象時,打印出_str_方法的返回值3. _str_方法必須擁有返回值,并且返回值的數(shù)據(jù)類型格式只能是字符串類型練習題4判斷以下說法是否正確,并說明理由要

18、求:1. 類就好比一個模型,可以預先定義一些統(tǒng)一的屬性或者方法,然后通過這個模型創(chuàng)建出具體的對象 True2. 類是抽象的,而對象是具體的、實實在在的一個事物 True3. 擁有相同(或者類似)屬性和行為的對象都可以抽像出一個類 True4. 一個類只能創(chuàng)建出一個對象 False 通過類可以創(chuàng)建無數(shù)個不同的對象 例外:使用了單例模式的,只會創(chuàng)建出一個對象(就業(yè)班課程會講解單例模式)5. _init_方法在創(chuàng)建對象時,可以完成一些初始化的操作,完成一些默認的設定 True6. 類是抽象的,而對象是具體的、實實在在的一個事物 True7. _str_方法可以沒有返回值 False 必須有返回值8.

19、 _str_方法可以返回除字符串以外的其他類型的數(shù)據(jù) False 必須返回字符串類型的數(shù)據(jù)練習題1面向對象應用1要求:1. 任意定義一個動物類2. 使用_init_方法,在創(chuàng)建某個動物對象時,為其添加name、age、color,food等屬性,如“熊貓”,5,“黑白”,66,“竹子”3. 為動物類定義一個run方法,調(diào)用run方法時打印相關信息,如打印出“熊貓正在奔跑”4. 為動物類定義一個get_age方法,調(diào)用get_age方法時打印相關信息,如打印出“這只熊貓今年5歲了”5. 為動物類定義一個eat方法,調(diào)用eat方法時打印相關信息,如打印出“熊貓正在吃竹子”6. 通過動物類分別創(chuàng)建出

20、3只不同種類的動物,分別調(diào)用它們的方法,讓他們“跑起來”,“吃起來” class Animal:     def _init_(self, name, age, color, food):         = name   # 為對象設置name屬性         self.age = age   # 為對象設置age屬性         self.color = color   # 為對象設置color

21、屬性         self.food = food   # 為對象設置food屬性     # run方法     def run(self):         print("%s正在奔跑."%)     # 打印年齡的方法     def get_age(self):         print("這只%s今年%s"%(se

22、, str(self.age)     # 吃方法     def eat(self):         print("%s正在吃%s"%(, self.food) # 貓 catTom = Animal("Tom", 3, "gray", "fish") # 老鼠 mouseJerry = Animal("Jerry", 3, "brown", "奶酪&

23、quot;) # 狗 watchdog = Animal("旺財", 2, "white", "meat") tom_cat.run() tom_cat.get_age() tom_cat.eat() .額外知識函數(shù) 在學習函數(shù)之前,首先要明白為什么要學習函數(shù)?學習了函數(shù),能提高我們的工作效率,編程語言里面,離不開函數(shù)提高效率體現(xiàn)在哪里?函數(shù)可以封裝一段代碼,只需要我們定義一次,就可以做到多次使用了.函數(shù)是用來干什么的?每一個函數(shù)都有對應的意義,我們定義函數(shù),都是為了實現(xiàn)某種單一的功能,也就是說,函數(shù)就是為了實現(xiàn)某種功能,實現(xiàn)某些需求

24、的9. 定義函數(shù)那我們?nèi)绾味x函數(shù)?當我們調(diào)用say_hello這個函數(shù)的時候,我們能看到這樣的一句打印輸出,這就說明這個函數(shù)被調(diào)用了.任何一個函數(shù),必須要做到先定義(先聲明),后調(diào)用如果我們將調(diào)用提前,我們會看到:為什么?因為咱們python是一門解釋性語言,代碼是從上到下一行一行執(zhí)行的,所以當代碼運行到第一行的時候,我們調(diào)用say_hello()的時候,并沒有對應的方法,這就好比:我們把say_hello()當做一個做飯的功能,我們只有先做飯,才能吃飯,先有做飯這個功能,我們才能做飯.10. 函數(shù)的復用性下面說一下函數(shù)參數(shù)的使用,那么,在說參數(shù)之前,我們先了解一下函數(shù)的復用性,使用函數(shù)到底

25、好在哪里?比如我有這么一個需求,我想遍歷一個1-100之間所有的數(shù),這很簡單i = 0while i <=100:print ii+=1這樣我就能獲取1-100之間所有的數(shù)我們將這一段代碼封裝到一個函數(shù)里面去,這樣我們就很方便的能夠在任何地方打印1-100之間所有的數(shù)了如果我們想在其他的頁面也打印這個1-100之間所有的數(shù),那我們還用寫這個代碼么?答案是肯定不需要再寫這么多行代碼了1. 確定這個函數(shù)的包名 ,我取的名字是utils2. 導包3. 我們來看一下控制臺能不能獲取到1-100之間所有的數(shù)也是可以的,所以說,這個函數(shù)封裝了我們一段代碼,實現(xiàn)了打印1-100之間所有的數(shù)那我們在工作

26、中,實際上一個大的項目是有很多重復的功能的,比如聯(lián)網(wǎng)的操作,我們不可能每次都這樣一行行的寫代碼,所以,我們把它封裝到一個函數(shù)里面,下次想聯(lián)網(wǎng)獲取直接調(diào)用我們寫好的函數(shù)就行了,這就是函數(shù)的好處,復用性,這就是函數(shù)的可多次調(diào)用.11. 函數(shù)的參數(shù)言歸正傳,我們來說說函數(shù)參數(shù)的使用剛剛我們已經(jīng)能夠獲取到1-100之間所有的數(shù)了,但是我們現(xiàn)在改需求了,我們希望能夠獲取100-200之間的所有的數(shù),這個怎么辦呢?這個也很簡單我們再定義一個函數(shù)traverse1(),初始值改成100,當滿足小于等于200的情況打印就行了ok,沒問題,那我現(xiàn)在再改需求了,我希望打印出200到400之間所有的數(shù),怎么辦?也很

27、簡單:那我如果再改需求,我想打印10-50之間的所有數(shù),我是不是又要定義一種方法traverse3()?顯然,我們發(fā)現(xiàn),其實這幾個函數(shù),相似的地方還是挺多的我們僅僅只是改變了i的初始值,以及while i <= 多少的一個值而已,這樣的代碼,顯然是過于死板的,我們需要把這個代碼寫活,這里,我們就用到了參數(shù)了實際上,如果我們i的初始值和我們循環(huán)的條件i<= 多少的值要是能隨心所欲的根據(jù)我們自己的需求變化就好了,所以這里,我定義了兩個變量,一個是m 一個是n,m表示循環(huán)的初始值,n表示你循環(huán)的終止值,也就是i<=n我們循環(huán)的條件如果我們想遍歷100-200之間的所有數(shù),那我們傳進來100,200 就能夠代替這個m,n的值就好了,這里,咋們函數(shù)提供了這樣的一種方式我們把100這個值傳給了m,200這個值傳給了n那么 i = 100while i <= 200:我們就能打印出100到200之間所有的數(shù)了,現(xiàn)在,我希望打印200-300之間的數(shù),就可以直接使用就行了一行代碼就搞定了,所以說,有參數(shù)的函數(shù)是靈活的那么參數(shù)又分為形參和實參:在函數(shù)上定義的參數(shù)只是一個占位符,被稱為形式參數(shù),簡稱形參在調(diào)用時傳入的參數(shù)是具體的內(nèi)容,被稱為實際參數(shù),簡稱實參m和n僅僅只是一個占位而已,我們?nèi)绻粋髦颠M

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論