![Python基礎(chǔ)案例教程課件:對(duì)象_第1頁(yè)](http://file4.renrendoc.com/view12/M0B/1C/35/wKhkGWXBn-GAYZCSAADKf9fXmmk610.jpg)
![Python基礎(chǔ)案例教程課件:對(duì)象_第2頁(yè)](http://file4.renrendoc.com/view12/M0B/1C/35/wKhkGWXBn-GAYZCSAADKf9fXmmk6102.jpg)
![Python基礎(chǔ)案例教程課件:對(duì)象_第3頁(yè)](http://file4.renrendoc.com/view12/M0B/1C/35/wKhkGWXBn-GAYZCSAADKf9fXmmk6103.jpg)
![Python基礎(chǔ)案例教程課件:對(duì)象_第4頁(yè)](http://file4.renrendoc.com/view12/M0B/1C/35/wKhkGWXBn-GAYZCSAADKf9fXmmk6104.jpg)
![Python基礎(chǔ)案例教程課件:對(duì)象_第5頁(yè)](http://file4.renrendoc.com/view12/M0B/1C/35/wKhkGWXBn-GAYZCSAADKf9fXmmk6105.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
對(duì)象本講目標(biāo)類和對(duì)象封裝繼承多態(tài)模塊什么是對(duì)象?對(duì)象是內(nèi)存中專門(mén)用來(lái)存儲(chǔ)數(shù)據(jù)的一塊區(qū)域。對(duì)象中可以存放各種數(shù)據(jù)(比如:數(shù)字、布爾值、代碼)對(duì)象由三部分組成:1.對(duì)象的標(biāo)識(shí)(id)2.對(duì)象的類型(type)3.對(duì)象的值(value)oopPython是一門(mén)面向?qū)ο蟮木幊陶Z(yǔ)言所謂的面向?qū)ο蟮恼Z(yǔ)言:簡(jiǎn)單理解就是語(yǔ)言中的所有操作都是通過(guò)對(duì)象來(lái)進(jìn)行的容易閱讀,并且比較易于維護(hù),容易復(fù)用不太符合常規(guī)的思維,編寫(xiě)起來(lái)較麻煩面向過(guò)程的編程的語(yǔ)言:
面向過(guò)程指將我們的程序的邏輯分解為一個(gè)一個(gè)的步驟,
通過(guò)對(duì)每個(gè)步驟的抽象,來(lái)完成程序可復(fù)用性比較低,難于維護(hù)類類是對(duì)象的模板對(duì)象是類的實(shí)例(instance)如果多個(gè)對(duì)象是通過(guò)一個(gè)類創(chuàng)建的,我們稱這些對(duì)象是一類對(duì)象
像int()float()bool()str()list()dict()....這些都是類類是type類型的對(duì)象類
定義類的語(yǔ)法class類名([父類]):
代碼塊<class'__main__.MyClass'>classMyClass(): passprint(MyClass)#<class'__main__.MyClass'>#創(chuàng)建類的對(duì)象mc=MyClass()mc_2=MyClass()isinstanceisinstance()用來(lái)檢查一個(gè)對(duì)象是否是一個(gè)類的實(shí)例result=isinstance(mc,MyClass)result=isinstance(mc_2,str)#print(result)#print(mc,type(mc))#print(id(MyClass),type(MyClass))#print(id(mc),type(mc))類的定義類和對(duì)象都是對(duì)現(xiàn)實(shí)生活中的事物或程序中的內(nèi)容的抽象實(shí)際上所有的事物都由兩部分構(gòu)成:
1.數(shù)據(jù)(屬性)
2.行為(方法)類創(chuàng)建對(duì)象的流程1.創(chuàng)建一個(gè)變量2.在內(nèi)存中創(chuàng)建一個(gè)新對(duì)象3.將對(duì)象的id賦值給變量類的基本結(jié)構(gòu)class類名([父類]):
公共的屬性...#對(duì)象的初始化方法
def__init__(self,...):...#其他的方法
defmethod_1(self,...):...defmethod_2(self,...):...案例-類的定義classPerson: name='qq' defsay_hello(self): print('你好!我是%s'%)#創(chuàng)建Person類的實(shí)例p1=Person()p2=Person()#print(p1,type(p1))#print()案例-類的調(diào)用#修改p1的name屬性='小小'='哈哈'#調(diào)用方法對(duì)象.方法名()#方法調(diào)用和函數(shù)調(diào)用區(qū)別# 如果是函數(shù)調(diào)用,則調(diào)用時(shí)傳幾個(gè)參數(shù),就會(huì)有幾個(gè)參數(shù)# 如果是方法調(diào)用,默認(rèn)傳遞一個(gè)參數(shù)(當(dāng)前對(duì)象),所以方法中至少要定義一個(gè)形參#p1.say_hello()#'你好,我是小小'#p2.say_hello()#'你好,我是哈哈'對(duì)象的初始化#在類中可以定義一些特殊方法(魔術(shù)方法)#特殊方法都是以雙__開(kāi)頭,以雙__結(jié)尾的方法(雙下劃線-兩個(gè)下劃線)#特殊方法不需要我們自己調(diào)用,也不要嘗試去調(diào)用特殊方法#特殊方法__init__會(huì)在特殊的時(shí)刻自動(dòng)調(diào)用#創(chuàng)建對(duì)象的流程# 1.創(chuàng)建一個(gè)變量# 2.在內(nèi)存中創(chuàng)建一個(gè)新對(duì)象# 3.特殊方法執(zhí)行# 4.將對(duì)象的id賦值給變量#特殊方法__init__()會(huì)在對(duì)象創(chuàng)建以后立即執(zhí)行#__init__()可以用來(lái)向新對(duì)象中初始化屬性#調(diào)用類創(chuàng)建時(shí),類后邊的所有參數(shù)都會(huì)依次傳遞到__init__()方法中案例-對(duì)象的初始化classPerson: def__init__(self): print('init方法-hello') defsay_hello(self): print('大家好,我是')#創(chuàng)建Person對(duì)象p1#p1=Person()#將會(huì)自動(dòng)調(diào)用__init__#p2=Person()#每次創(chuàng)建對(duì)象,都會(huì)調(diào)用__init__方法特殊方法的調(diào)用classPerson: def__init__(self,name): print(self) =name defsay_hello(self): print('大家好,我是%s'%)#p1=Person('aa')#p2=Person('bb')#p1.say_hello()#p2.say_hello()#注意點(diǎn)如果類中有代碼塊如print('呵呵')將只會(huì)在類定義時(shí)調(diào)用一次#對(duì)于類中的代碼塊創(chuàng)建對(duì)象時(shí)是不會(huì)調(diào)用的#而__init__()則是只要?jiǎng)?chuàng)建對(duì)象就會(huì)調(diào)用一次#類的結(jié)構(gòu)中,類的方法要注意必須至少定義一個(gè)參數(shù)封裝-實(shí)現(xiàn)方式一實(shí)現(xiàn)封裝一通過(guò)在屬性前加雙下劃線如self.__name
一般我們會(huì)將一些私有必屬性,以_開(kāi)頭一般情況下,使用_開(kāi)頭的屬性都是私有屬性,沒(méi)有特殊需要不要修改,實(shí)際可以修改classPerson: def__init__(self,name): self._name=name defget_name(self): returnself._name defset_name(self,name): self._name=name
封裝-實(shí)現(xiàn)方式二實(shí)現(xiàn)封裝簡(jiǎn)潔方式裝飾器#@property裝飾器用來(lái)將一個(gè)get方法,轉(zhuǎn)換為對(duì)象的屬性#添加@property裝飾器后,可以像調(diào)用屬性一樣使用get方法#使用@property裝飾的方法,方法名必須和屬性名是一樣的#set方法前加@屬性名.setter,#注意get方法必須寫(xiě)classPerson: def__init__(self,name,age): self._name=name self._age=age @property defname(self): print('get方法執(zhí)行了...') returnself._name @name.setter defname(self,name): print('set方法執(zhí)行了。。') self._name=name繼承實(shí)現(xiàn)方式定義類時(shí),可以在類名后的括號(hào)中指定當(dāng)前類的父類子類可以直接繼承父類中的所有屬性和方法classAnimal: defrun(self): print('動(dòng)物會(huì)跑。。。')classDog(Animal): defbark(self): print('汪汪。。')classPerson(object): passissubclass()檢查一個(gè)類是否是另一個(gè)類的子類print(issubclass(Dog,Animal))重寫(xiě)如果在子類中有和父類同名的方法,則通過(guò)子類實(shí)例去調(diào)用方法時(shí),會(huì)調(diào)用子類的方法,而不是父類的方法,這叫做方法的重寫(xiě)
當(dāng)調(diào)用一個(gè)對(duì)象的方法時(shí)會(huì)優(yōu)先在當(dāng)前對(duì)象中查找是否有該方法,如果有直接調(diào)用如果沒(méi)有,則到父類中查找,如果沒(méi)有會(huì)報(bào)錯(cuò)父類中的所有方法都會(huì)被子類繼承,包括特殊方法,也可以被重寫(xiě)通過(guò)super()可以獲取當(dāng)前類的父類案例classAnimal: def__init__(self,name): self._name=name defrun(self): print('動(dòng)物會(huì)跑...') @property defname(self): returnself._name @name.setter defname(self,name): self._name=nameclassDog(Animal): def__init__(self,name,age): super().__init__(name) self._age=age @property defage(self): returnself._age @age.setter defage(self,age): self._age=age#測(cè)試#d=Dog('oo',2)#print()#print(d.age)類屬性classA(object): #類屬性,直接在類中定義的屬性是類屬性
#類屬性可以通過(guò)類或類的實(shí)例訪問(wèn)到
#但是類屬性只能通過(guò)類對(duì)象來(lái)修改,無(wú)法通過(guò)實(shí)例對(duì)象修改
count=0實(shí)例屬性classA(object):
count=0 def__init__(self): #實(shí)例屬性,通過(guò)實(shí)例對(duì)象添加的屬性
#實(shí)例屬性只能通過(guò)實(shí)例對(duì)象來(lái)修改
='aa'實(shí)例方法classA(object): #實(shí)例方法
#在類中定義,以self為第一個(gè)參數(shù)的方法都是實(shí)例方法
#實(shí)例方法在調(diào)用時(shí),Python會(huì)自動(dòng)將調(diào)用對(duì)象作為self傳入
#實(shí)例方法可以通過(guò)實(shí)例和類去調(diào)用
# 當(dāng)通過(guò)實(shí)例調(diào)用時(shí),會(huì)自動(dòng)將當(dāng)前對(duì)象作為self傳入
# 當(dāng)通過(guò)類調(diào)用時(shí),不會(huì)自動(dòng)傳遞self,需要手動(dòng)傳遞
deftest(self): print('這是test方法。。',self)類方法classA(object):
#類方法
#在類內(nèi)部使用@classmethod修飾的方法屬于類方法
#類方法的第一個(gè)參數(shù)是cls,也會(huì)被自動(dòng)傳遞
#類方法可以通過(guò)類調(diào)用,也可以通過(guò)實(shí)例調(diào)用
@classmethod deftest_2(cls): print('這是test_2方法,是一個(gè)類方法,加了裝飾@classmethod',cls)靜態(tài)方法classA(object):
#靜態(tài)方法
#在類中使用@staticmethod修飾的方法稱為靜態(tài)方法
#靜態(tài)方示不需要指定任何的默認(rèn)參數(shù),靜態(tài)方法哥以通過(guò)類和實(shí)例調(diào)用
#靜態(tài)方法一般是一些工具方法,和當(dāng)前類無(wú)關(guān)
@staticmethod deftest_3(): print('test_3執(zhí)行了,這是靜態(tài)方法')垃圾回收在程序中沒(méi)有被引用的對(duì)象就是垃圾,這種垃圾對(duì)象過(guò)多以后會(huì)影響到程序的運(yùn)行的性能所以我們必須進(jìn)行及時(shí)的垃圾回收,所謂的垃圾回收就是講垃圾對(duì)象從內(nèi)存中刪除在Python中有自動(dòng)的垃圾回收機(jī)制,它會(huì)自動(dòng)將這些沒(méi)有被引用的對(duì)象刪除,所以我們不用手動(dòng)處理垃圾回收classA:def__init__(self):='A類'#del是一個(gè)特殊方法,它會(huì)在對(duì)象被垃圾回收前調(diào)用
def__del__(self):print('A()對(duì)象被刪除了~~~',self)a=A()b=a#又使用一個(gè)變量b,來(lái)引用a對(duì)應(yīng)的對(duì)象#a=None#將a設(shè)置為了None,此時(shí)沒(méi)有任何的變量對(duì)A()對(duì)象進(jìn)行引用,它就是變成了垃圾模塊模塊化將一個(gè)完整的程序分解為一個(gè)個(gè)的小模塊特點(diǎn): 1.方便開(kāi)發(fā) 2.方便維護(hù) 3.模塊可以復(fù)用#在Python中一個(gè)py文件就是一個(gè)模塊#注意模塊名要符合標(biāo)識(shí)符規(guī)范模塊的引入引入模塊1.import模塊名2.import模塊名as模塊別名可以引入同一個(gè)模塊多次,但是模塊實(shí)例只會(huì)創(chuàng)建一個(gè)import可以在程序的任意位置調(diào)用,但一般情況下,放在程序開(kāi)頭在每一個(gè)械塊內(nèi)部都有一個(gè)__name__屬性,通過(guò)這個(gè)屬性可以獲取到模塊的名字__name__屬性值為_(kāi)_main__的模塊是主模塊,一個(gè)程序只會(huì)有一個(gè)主模塊主模塊就是直接通過(guò)python執(zhí)行的模塊案例-模塊的引入引入模塊1importtest_module#引入test_module模塊importtest_moduleastest#為模塊定義別名引入模塊2可以在模塊中定義變量,在模塊中定義的變量,引用模塊后就可以使用importmprint(m.a)引入模塊3只引入模塊中的部分內(nèi)容語(yǔ)法from模塊名import變量1,變量2...frommimportPerson#引入模塊中類包包也是一個(gè)模塊當(dāng)模塊中代碼過(guò)多時(shí),或者一個(gè)模塊需要被分解為多個(gè)模塊時(shí),就需要包普通模塊就是一個(gè)py文件,而包是一個(gè)文件夾包中必須有有一個(gè)__init_
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 買貓合同范本
- 中國(guó)多普勒血流探測(cè)儀市場(chǎng)運(yùn)行態(tài)勢(shì)及行業(yè)發(fā)展前景預(yù)測(cè)報(bào)告
- 業(yè)主房子托管合同范本
- 包材采購(gòu)合同范例
- 代工生產(chǎn)合同范本
- 勞務(wù)公司與臨時(shí)工合同范本
- 鋼結(jié)構(gòu)加工制作合同范本
- 兩層鋪面房屋租賃合同范本
- 重慶城區(qū)房屋出租合同范本
- 農(nóng)業(yè)合作合同范本
- 高一化學(xué)教學(xué)進(jìn)度計(jì)劃表
- 人教PEP版四年級(jí)下冊(cè)小學(xué)英語(yǔ)全冊(cè)同步練習(xí)(一課一練)
- 新員工入職培訓(xùn)考試附答案
- 高校畢業(yè)生就業(yè)見(jiàn)習(xí)登記表
- 七年級(jí)歷史第5課--安史之亂與唐朝衰亡ppt課件
- 戶外LED顯示屏設(shè)計(jì)施工方案.docx
- 包裝材料及紙制品生產(chǎn)建設(shè)項(xiàng)目可行性實(shí)施報(bào)告
- 財(cái)務(wù)收支月報(bào)表excel模板
- 國(guó)標(biāo)充電協(xié)議報(bào)文整理
- 水餃類產(chǎn)品質(zhì)量檢驗(yàn)作業(yè)指導(dǎo)書(shū)
- 電力變壓器計(jì)算單
評(píng)論
0/150
提交評(píng)論