Python程序開發(fā)基礎 課件 項目8 活學活用面向對象_第1頁
Python程序開發(fā)基礎 課件 項目8 活學活用面向對象_第2頁
Python程序開發(fā)基礎 課件 項目8 活學活用面向對象_第3頁
Python程序開發(fā)基礎 課件 項目8 活學活用面向對象_第4頁
Python程序開發(fā)基礎 課件 項目8 活學活用面向對象_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

類的特殊方法—獲取網(wǎng)頁數(shù)據(jù)任務描述寫一個網(wǎng)頁數(shù)據(jù)操作類(提示:需要用到urllib模塊)。完成以下功能:(1)get_httpcode():獲取網(wǎng)頁的狀態(tài)碼并返回結果;例如:200,301,404等,類型為int。(2)get_htmlcontent():獲取網(wǎng)頁的內容,返回類型為str。(3)get_linknum():計算網(wǎng)頁的鏈接數(shù)目。本任務要求編寫程序,定義網(wǎng)頁類page_data,分別創(chuàng)建get_httpcode()、get_htmlcontent()、get_linknum()方法,通過構造方法獲取百度網(wǎng)頁的數(shù)據(jù)。Python系統(tǒng)內置了幾個特殊的方法,它們是構造方法與析構方法、類方法和靜態(tài)方法。01構造方法與析構方法02靜態(tài)方法與類方法03任務實現(xiàn)構造方法與析構方法01構造方法每個類都有一個默認的__init__()方法,即構造方法。如果定義類時顯式地定義__init__()方法,那么創(chuàng)建對象時Python解釋器會調用顯式定義的__init__()方法;如果定義類時沒有顯式定義__init__()方法,那么Python解釋器會調用默認的__init__()方法。構造方法__init__()方法按照參數(shù)的有無(self除外)可分為無參構造方法和有參構造方法。無參構造方法:無參構造方法中可以為屬性設置初始值,此時使用該方法創(chuàng)建的所有對象都具有相同的初始值。有參構造方法:有參構造方法中可以使用參數(shù)為屬性設置初始值,此時使用該方法創(chuàng)建的所有對象都具有不同的初始值。構造方法定義一個Information類,在該類中顯式地定義一個帶有3個參數(shù)的__init__()方法。classInforamtion(object):def__init__(self,name,sex):=nameself.sex=sexinfomation=Inforamtion('李婉','女')前面在類中定義的屬性是類屬性,可以通過對象或類進行訪問;在構造方法中定義的屬性是實例屬性,只能通過對象進行訪問。構造方法計算學生成績。定義一個學生類,具體要求如下:1.有如下屬性:姓名、年齡、成績(語文,數(shù)學,英語),其中每科成績的類型為整數(shù)。2.有如下方法獲取學生的姓名:get_name(),返回值類型為str;獲取學生的年齡:get_age(),返回值類型為int。返回3門科目中的最高分:get_course(),返回類型為int。寫好類以后,定義一個學生實例進行測試。classStudnet(object):def__init__(self,name,age,score):=nameself.age=ageself.score=scoredefget_name(self):returndefget_age(self):returnself.agedefget_course(self):returnmax(self.score)zm=Studnet('Gaoyong',20,[82,96,88])print(zm.get_name())print(zm.get_age())print(zm.get_course())析構方法當一個對象的引用計數(shù)器數(shù)值為0時,就會調用__del__()方法,這個方法就是類的析構方法。importsysclassDestruction(object):def__del__(self):print('對象被釋放')destruction=Destruction()print(sys.getrefcount(destruction))析構方法Python的析構方法采用的是垃圾回收機制。Python中的垃圾回收主要采用的是引用計數(shù)。引用計數(shù)是一種內存管理技術,它通過引用計數(shù)器記錄所有對象的引用數(shù)量,當對象的引用計數(shù)器數(shù)值為0時,就會將該對象視為垃圾進行回收。getrefcount()函數(shù)是sys模塊中用于統(tǒng)計對象引用數(shù)量的函數(shù),其返回結果通常比預期的結果大1。這是因為getrefcount()函數(shù)也會統(tǒng)計臨時對象的引用。類方法與靜態(tài)方法02類方法實例方法定義時只比普通函數(shù)多一個self參數(shù)的方法稱為實例方法,它只能通過類實例化的對象調用。classCar:

wheels=4

#

屬性

defdrive(self):

#實例方法

print(‘開車方法')類方法與實例方法的不同點:類方法實例方法使用裝飾器@classmethod修飾——類方法的第一個參數(shù)為cls,它代表類本身實例方法的第一個參數(shù)為self,它代表對象本身即可由對象調用,亦可直接由類調用只能由對象調用可以修改類屬性無法修改類屬性類方法定義類方法類方法可以被類名或對象名調用,其語法格式如下:類名.類方法對象名.類方法修改類屬性在實例方法中無法修改類屬性的值,但在類方法中可以修改類屬性的值。classApple(object):count=0defadd_one(self):#實例方法

self.count=1@classmethoddefadd_two(cls):#類方法cls.count=2apple=Apple()apple.add_one()print(Apple.count)Apple.add_two()print(Apple.count)02靜態(tài)方法靜態(tài)方法與實例方法的不同:靜態(tài)方法實例方法使用裝飾器@staticmethod修飾——方法中需要以“類名.方法/屬性名”的形式訪問類的成員方法中需要以“self.方法/屬性名”的形式訪問類的成員既可由對象調用,亦可由類調用只能由對象調用定義一個包含屬性num與靜態(tài)方法static_method()的類Example。classExample:num=10#類屬性@staticmethod#定義靜態(tài)方法defstatic_method():print(f"類屬性的值為:{Example.num}")print("靜態(tài)方法")任務實現(xiàn)03獲取百度網(wǎng)頁數(shù)據(jù)#獲取網(wǎng)頁數(shù)據(jù)importurllib.requestclassPage_data(object):def__init__(self,url_add):self.url=url_adddefget_httpcode(self):status=urllib.request.urlopen(self.url).codereturnstatusdefget_htmlcontent(self):contentstr=urllib.request.urlopen(self.url).read()returncontentstrdefget_linknum(self):content=urllib.request.urlopen(self.url).read()returnlen(content.decode('utf-8').split('<ahref'))-1

A=Page_data('')print(A.get_httpcode())print(A.get_htmlcontent())print(A.get_linknum())

任務總結Python系統(tǒng)內置了構造方法與析構方法、類方法和靜態(tài)方法。每個類都有一個默認的__init__()方法,即構造方法。__init__()方法有無參構造方法和有參構造方法之分。無參構造方法是指無參構造方法中可以為屬性設置初始值,此時使用該方法創(chuàng)建的所有對象都具有相同的初始值。有參構造方法是指有參構造方法中可以使用參數(shù)為屬性設置初始值,此時使用該方法創(chuàng)建的所有對象都具有不同的初始值。當一個對象的引用計數(shù)器數(shù)值為0時,就會調用__del__()方法,即析構方法。析構方法是為避免無用對象占用空間。類方法是定義在類內部,使用裝飾器@classmethod修飾的方法。而靜態(tài)方法是定義在類內部,使用裝飾器@staticmethod修飾的方法。謝謝觀看面向對象-設計人機猜拳游戲任務描述

猜拳游戲又稱“猜丁殼”,是一個古老、簡單的游戲,常用來解決爭議的情況。猜拳游戲有三種手勢表示,即剪子、石頭、布。游戲規(guī)則是:剪子勝布、石頭勝剪子、布勝石頭。

本任務是編寫程序,實現(xiàn)人機猜拳游戲。要求采用面向對象的程序設計思想。俗話說“老貓房上睡,一輩傳一輩”,這句話說出了自然界的繼承關系。Python中類與類之間也同樣具有繼承關系。01單繼承與多繼承02方法重寫03任務實現(xiàn)單繼承與多繼承01單繼承Python中類與類之間具有繼承關系,其中被繼承的類稱為父類或基類,繼承的類稱為子類或派生類。子類在繼承父類時,會自動擁有父類中的方法和屬性。單繼承指的是子類只繼承一個父類,其語法格式如下:class子類(父類)單繼承定義一個表示兩棲動物的父類Amphibian和一個表示青蛙的子類Frog。classAmphibian(object):name="兩棲動物"deffeatures(self):print("幼年用鰓呼吸")print("成年用肺兼皮膚呼吸")classFrog(Amphibian):defattr(self):print(f"青蛙是{}")print("我會呱呱叫")frog=Frog()print()frog.features()frog.attr()多繼承多繼承指的是一個子類繼承多個父類,其語法格式如下:class子類(父類A,父類B,...):定義English類、Math類與Student類,使Student類繼承English類與Math類。classEnglish:defeng_know(self):print('具備英語知識。')classMath:defmath_know(self):print('具備數(shù)學知識。')classStudent(English,Math):defstudy(self):print('學生的任務是學習。')stu=Student()stu.eng_know()stu.math_know()stu.study()多繼承classHorse(object):defrun(self):print("馬兒奔跑")classDonkey(object):defrun(self):print("驢兒打滾")classMule(Horse,Donkey):passmule=Mule()mule.run()方法重寫02方法的重寫子類可以繼承父類的屬性和方法,若父類的方法不能滿足子類的要求,子類可以重寫父類的方法,以達到理想的需求。父類定義如下:classCat(Felines):name="貓"defspeciality(self):print(f'{}會抓老鼠')print(f'{}會爬樹')子類定義如下:classFelines:defspeciality(self):print("貓科動物特長是爬樹")方法的重寫#父類定義如下classFelines:defspeciality(self):print("貓科動物特長是爬樹")#子類定義如下classCat(Felines):name="貓"defspeciality(self):print(f'{}會抓老鼠')print(f'{}會爬樹')cat=Cat()cat.speciality()運行結果是:貓會抓老鼠貓會爬樹>>>從運行結果可以看到,子類Cat重寫了父類Felines的父類的speciality()方法super()函數(shù)如果子類重寫了父類的方法,但仍希望調用父類中的方法,那么可以使用super()函數(shù)實現(xiàn)。super()只能在子類中使用,用于調用父類中的方法。super().方法名()classFelines:defspeciality(self):print("貓科動物特長是爬樹")classCat(Felines):name="貓"defspeciality(self):print(f'{}會抓老鼠')print(f'{}會爬樹')cat=Cat()cat.speciality()super().speciality()任務實現(xiàn)03設計人機猜拳游戲

#設計人機猜拳游戲importrandomclassPlayer:def__init__(self):self.dict={0:'剪刀',1:'石頭',2:'布'}#手勢defgesture(self):player_input=int(input("請輸入(0剪刀、1石頭、2布:)"))returnself.dict[player_input]classAIPlayer(Player):play_data=[]defai_gesture(self):whileTrue:computer=random.randint(0,2)iflen(self.play_data)>=4:#獲取玩家出拳的最大概率max_prob=max(self.play_data,key=self.play_data.count)ifmax_prob=='剪刀':return'石頭'elifmax_prob=='石頭':return'布'else:return'剪刀'else:returnself.dict[computer]設計人機猜拳游戲

classGame:defgame_judge(self):player=Player().gesture()AIPlayer().play_data.append(player)aiplayer=AIPlayer().ai_gesture()if(player=='剪刀'andaiplayer=='布')or\(player=='石頭'andaiplayer=='剪刀')\or(player=='布'andaiplayer=='石頭'):print(f"電腦出的手勢是{aiplayer},恭喜,你贏了!")elif(player=='剪刀'andaiplayer=='剪刀')or\(player=='石頭'andaiplayer=='石頭')\or(player=='布'andaiplayer=='布'):print(f"電腦出的手勢是{aiplayer},打成平局了!")else:print(f"電腦出的手勢是{aiplayer},你輸了,再接再厲!")defgame_start(self):self.game_judge()whileTrue:option=input("是否繼續(xù):y/n\n")ifoption=='y':self.game_judge()else:breakg=Game()g.game_start()任務總結俗話說“老鼠的兒子會打洞”,這句話說出了自然界的繼承關系。Python中類與類之間也同樣具有繼承關系,其中被繼承的類稱為父類或基類,繼承的類稱為子類或派生類。子類在繼承父類時,會自動擁有父類中的方法和屬性。當子類只繼承一個父類稱為單繼承。子類繼承父類后,就擁有了從父類繼承的屬性和方法,它既可以調用自己的方法,也可以調用從父類繼承的方法。當一個子類繼承多個父類時稱為多繼承。如果子類具有多個父類,也自動擁有所有父類的公有成員。謝謝觀看定義類和創(chuàng)建對象任務描述類和對象是面向對象的程序設計中兩個非常重要的概念。本任務要求掌握類和對象的概念、定義和創(chuàng)建的方法,為后續(xù)面向對象的編程打下堅實的基礎。01類的概念及定義02對象及其創(chuàng)建類的概念及其定義01類和對象面向對象的思想中提出了兩個概念:類和對象。類:類是對多個對象共同特征的抽象描述,它是對象的模板。將具有相同屬性及相同行為的一組對象稱為類(class)。類提供一個抽象的描述,其內部包括屬性和方法兩個主要部分,類可以說是創(chuàng)建對象時所使用的模板。類的定義類中可以定義數(shù)據(jù)成員即屬性和成員函數(shù)即方法,屬性用于描述對象特征,方法用于描述對象行為。定義格式如下:class類名:

屬性名=屬性值def方法名(self):

方法體class類名(object):

屬性名=屬性值def方法名(self):

方法體注意:類名采用駝峰命名法?;蝾惖亩x譬如:classCar:wheel=4name=“寶馬”defdirve(self):print(“開車”)defstop(self):print(“停車”)classStudent(object):age=19grade=“university”defstudy(self):print(“我愛學習”)defexper(self):print(“我愛實驗”)對象及創(chuàng)建02對象的概念對象(object)是現(xiàn)實世界中可描述的事物,它可以是有形的也可以是無形的。對象可以是有生命的個體,譬如,一個人或一只鳥。對象也可以是無生命的個體,譬如,一輛車或一臺電腦。對象還可以是一個抽象的概念,譬如,天氣的變化或一場運動會。對象是構成世界的一個獨立單位,它由數(shù)據(jù)(描述事物的屬性)和作用于數(shù)據(jù)的操作(體現(xiàn)事物的方法)構成一個獨立整體。創(chuàng)建對象類定義完成后不能直接使用,需要實例化為對象才能實現(xiàn)其意義。對象的創(chuàng)建:對象名=類名()譬如:my_car1=Car()my_car2=Car()stu1=Student()stu2=Student()訪問對象成員若想在程序中真正地使用對象,需掌握訪問對象成員的方法。對象成員分為屬性和方法,其訪問格式分別如下:譬如:my_my_car1.drive()my_car2.wheelMy_car2.stop()stu1.gradestu1.study()stu2.agestu2.study()對象名.屬性對象名.方法()訪問限制類中定義的屬性和方法都默認為公有屬性和方法,由該類創(chuàng)建的對象可以任意訪問類的公有成員。為了契合封裝原則,保證類成員不被對象輕易訪問。Python支持將類中的成員設置為私有成員,在一定程度上限制了對象對類成員的訪問。創(chuàng)建私有成員

溫馨提示

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

評論

0/150

提交評論