




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
類(lèi)的特殊方法—獲取網(wǎng)頁(yè)數(shù)據(jù)任務(wù)描述寫(xiě)一個(gè)網(wǎng)頁(yè)數(shù)據(jù)操作類(lèi)(提示:需要用到urllib模塊)。完成以下功能:(1)get_httpcode():獲取網(wǎng)頁(yè)的狀態(tài)碼并返回結(jié)果;例如:200,301,404等,類(lèi)型為int。(2)get_htmlcontent():獲取網(wǎng)頁(yè)的內(nèi)容,返回類(lèi)型為str。(3)get_linknum():計(jì)算網(wǎng)頁(yè)的鏈接數(shù)目。本任務(wù)要求編寫(xiě)程序,定義網(wǎng)頁(yè)類(lèi)page_data,分別創(chuàng)建get_httpcode()、get_htmlcontent()、get_linknum()方法,通過(guò)構(gòu)造方法獲取百度網(wǎng)頁(yè)的數(shù)據(jù)。Python系統(tǒng)內(nèi)置了幾個(gè)特殊的方法,它們是構(gòu)造方法與析構(gòu)方法、類(lèi)方法和靜態(tài)方法。01構(gòu)造方法與析構(gòu)方法02靜態(tài)方法與類(lèi)方法03任務(wù)實(shí)現(xiàn)構(gòu)造方法與析構(gòu)方法01構(gòu)造方法每個(gè)類(lèi)都有一個(gè)默認(rèn)的__init__()方法,即構(gòu)造方法。如果定義類(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__()方法。構(gòu)造方法__init__()方法按照參數(shù)的有無(wú)(self除外)可分為無(wú)參構(gòu)造方法和有參構(gòu)造方法。無(wú)參構(gòu)造方法:無(wú)參構(gòu)造方法中可以為屬性設(shè)置初始值,此時(shí)使用該方法創(chuàng)建的所有對(duì)象都具有相同的初始值。有參構(gòu)造方法:有參構(gòu)造方法中可以使用參數(shù)為屬性設(shè)置初始值,此時(shí)使用該方法創(chuàng)建的所有對(duì)象都具有不同的初始值。構(gòu)造方法定義一個(gè)Information類(lèi),在該類(lèi)中顯式地定義一個(gè)帶有3個(gè)參數(shù)的__init__()方法。classInforamtion(object):def__init__(self,name,sex):=nameself.sex=sexinfomation=Inforamtion('李婉','女')前面在類(lèi)中定義的屬性是類(lèi)屬性,可以通過(guò)對(duì)象或類(lèi)進(jìn)行訪問(wèn);在構(gòu)造方法中定義的屬性是實(shí)例屬性,只能通過(guò)對(duì)象進(jìn)行訪問(wèn)。構(gòu)造方法計(jì)算學(xué)生成績(jī)。定義一個(gè)學(xué)生類(lèi),具體要求如下:1.有如下屬性:姓名、年齡、成績(jī)(語(yǔ)文,數(shù)學(xué),英語(yǔ)),其中每科成績(jī)的類(lèi)型為整數(shù)。2.有如下方法獲取學(xué)生的姓名:get_name(),返回值類(lèi)型為str;獲取學(xué)生的年齡:get_age(),返回值類(lèi)型為int。返回3門(mén)科目中的最高分:get_course(),返回類(lèi)型為int。寫(xiě)好類(lèi)以后,定義一個(gè)學(xué)生實(shí)例進(jìn)行測(cè)試。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())析構(gòu)方法當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)器數(shù)值為0時(shí),就會(huì)調(diào)用__del__()方法,這個(gè)方法就是類(lèi)的析構(gòu)方法。importsysclassDestruction(object):def__del__(self):print('對(duì)象被釋放')destruction=Destruction()print(sys.getrefcount(destruction))析構(gòu)方法Python的析構(gòu)方法采用的是垃圾回收機(jī)制。Python中的垃圾回收主要采用的是引用計(jì)數(shù)。引用計(jì)數(shù)是一種內(nèi)存管理技術(shù),它通過(guò)引用計(jì)數(shù)器記錄所有對(duì)象的引用數(shù)量,當(dāng)對(duì)象的引用計(jì)數(shù)器數(shù)值為0時(shí),就會(huì)將該對(duì)象視為垃圾進(jìn)行回收。getrefcount()函數(shù)是sys模塊中用于統(tǒng)計(jì)對(duì)象引用數(shù)量的函數(shù),其返回結(jié)果通常比預(yù)期的結(jié)果大1。這是因?yàn)間etrefcount()函數(shù)也會(huì)統(tǒng)計(jì)臨時(shí)對(duì)象的引用。類(lèi)方法與靜態(tài)方法02類(lèi)方法實(shí)例方法定義時(shí)只比普通函數(shù)多一個(gè)self參數(shù)的方法稱為實(shí)例方法,它只能通過(guò)類(lèi)實(shí)例化的對(duì)象調(diào)用。classCar:
wheels=4
#
屬性
defdrive(self):
#實(shí)例方法
print(‘開(kāi)車(chē)方法')類(lèi)方法與實(shí)例方法的不同點(diǎn):類(lèi)方法實(shí)例方法使用裝飾器@classmethod修飾——類(lèi)方法的第一個(gè)參數(shù)為cls,它代表類(lèi)本身實(shí)例方法的第一個(gè)參數(shù)為self,它代表對(duì)象本身即可由對(duì)象調(diào)用,亦可直接由類(lèi)調(diào)用只能由對(duì)象調(diào)用可以修改類(lèi)屬性無(wú)法修改類(lèi)屬性類(lèi)方法定義類(lèi)方法類(lèi)方法可以被類(lèi)名或?qū)ο竺{(diào)用,其語(yǔ)法格式如下:類(lèi)名.類(lèi)方法對(duì)象名.類(lèi)方法修改類(lèi)屬性在實(shí)例方法中無(wú)法修改類(lèi)屬性的值,但在類(lèi)方法中可以修改類(lèi)屬性的值。classApple(object):count=0defadd_one(self):#實(shí)例方法
self.count=1@classmethoddefadd_two(cls):#類(lèi)方法cls.count=2apple=Apple()apple.add_one()print(Apple.count)Apple.add_two()print(Apple.count)02靜態(tài)方法靜態(tài)方法與實(shí)例方法的不同:靜態(tài)方法實(shí)例方法使用裝飾器@staticmethod修飾——方法中需要以“類(lèi)名.方法/屬性名”的形式訪問(wèn)類(lèi)的成員方法中需要以“self.方法/屬性名”的形式訪問(wèn)類(lèi)的成員既可由對(duì)象調(diào)用,亦可由類(lèi)調(diào)用只能由對(duì)象調(diào)用定義一個(gè)包含屬性num與靜態(tài)方法static_method()的類(lèi)Example。classExample:num=10#類(lèi)屬性@staticmethod#定義靜態(tài)方法defstatic_method():print(f"類(lèi)屬性的值為:{Example.num}")print("靜態(tài)方法")任務(wù)實(shí)現(xiàn)03獲取百度網(wǎng)頁(yè)數(shù)據(jù)#獲取網(wǎng)頁(yè)數(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())
任務(wù)總結(jié)Python系統(tǒng)內(nèi)置了構(gòu)造方法與析構(gòu)方法、類(lèi)方法和靜態(tài)方法。每個(gè)類(lèi)都有一個(gè)默認(rèn)的__init__()方法,即構(gòu)造方法。__init__()方法有無(wú)參構(gòu)造方法和有參構(gòu)造方法之分。無(wú)參構(gòu)造方法是指無(wú)參構(gòu)造方法中可以為屬性設(shè)置初始值,此時(shí)使用該方法創(chuàng)建的所有對(duì)象都具有相同的初始值。有參構(gòu)造方法是指有參構(gòu)造方法中可以使用參數(shù)為屬性設(shè)置初始值,此時(shí)使用該方法創(chuàng)建的所有對(duì)象都具有不同的初始值。當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)器數(shù)值為0時(shí),就會(huì)調(diào)用__del__()方法,即析構(gòu)方法。析構(gòu)方法是為避免無(wú)用對(duì)象占用空間。類(lèi)方法是定義在類(lèi)內(nèi)部,使用裝飾器@classmethod修飾的方法。而靜態(tài)方法是定義在類(lèi)內(nèi)部,使用裝飾器@staticmethod修飾的方法。謝謝觀看面向?qū)ο?設(shè)計(jì)人機(jī)猜拳游戲任務(wù)描述
猜拳游戲又稱“猜丁殼”,是一個(gè)古老、簡(jiǎn)單的游戲,常用來(lái)解決爭(zhēng)議的情況。猜拳游戲有三種手勢(shì)表示,即剪子、石頭、布。游戲規(guī)則是:剪子勝布、石頭勝剪子、布勝石頭。
本任務(wù)是編寫(xiě)程序,實(shí)現(xiàn)人機(jī)猜拳游戲。要求采用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想。俗話說(shuō)“老貓房上睡,一輩傳一輩”,這句話說(shuō)出了自然界的繼承關(guān)系。Python中類(lèi)與類(lèi)之間也同樣具有繼承關(guān)系。01單繼承與多繼承02方法重寫(xiě)03任務(wù)實(shí)現(xiàn)單繼承與多繼承01單繼承Python中類(lèi)與類(lèi)之間具有繼承關(guān)系,其中被繼承的類(lèi)稱為父類(lèi)或基類(lèi),繼承的類(lèi)稱為子類(lèi)或派生類(lèi)。子類(lèi)在繼承父類(lèi)時(shí),會(huì)自動(dòng)擁有父類(lèi)中的方法和屬性。單繼承指的是子類(lèi)只繼承一個(gè)父類(lèi),其語(yǔ)法格式如下:class子類(lèi)(父類(lèi))單繼承定義一個(gè)表示兩棲動(dòng)物的父類(lèi)Amphibian和一個(gè)表示青蛙的子類(lèi)Frog。classAmphibian(object):name="兩棲動(dòng)物"deffeatures(self):print("幼年用鰓呼吸")print("成年用肺兼皮膚呼吸")classFrog(Amphibian):defattr(self):print(f"青蛙是{}")print("我會(huì)呱呱叫")frog=Frog()print()frog.features()frog.attr()多繼承多繼承指的是一個(gè)子類(lèi)繼承多個(gè)父類(lèi),其語(yǔ)法格式如下:class子類(lèi)(父類(lèi)A,父類(lèi)B,...):定義English類(lèi)、Math類(lèi)與Student類(lèi),使Student類(lèi)繼承English類(lèi)與Math類(lèi)。classEnglish:defeng_know(self):print('具備英語(yǔ)知識(shí)。')classMath:defmath_know(self):print('具備數(shù)學(xué)知識(shí)。')classStudent(English,Math):defstudy(self):print('學(xué)生的任務(wù)是學(xué)習(xí)。')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()方法重寫(xiě)02方法的重寫(xiě)子類(lèi)可以繼承父類(lèi)的屬性和方法,若父類(lèi)的方法不能滿足子類(lèi)的要求,子類(lèi)可以重寫(xiě)父類(lèi)的方法,以達(dá)到理想的需求。父類(lèi)定義如下:classCat(Felines):name="貓"defspeciality(self):print(f'{}會(huì)抓老鼠')print(f'{}會(huì)爬樹(shù)')子類(lèi)定義如下:classFelines:defspeciality(self):print("貓科動(dòng)物特長(zhǎng)是爬樹(shù)")方法的重寫(xiě)#父類(lèi)定義如下classFelines:defspeciality(self):print("貓科動(dòng)物特長(zhǎng)是爬樹(shù)")#子類(lèi)定義如下classCat(Felines):name="貓"defspeciality(self):print(f'{}會(huì)抓老鼠')print(f'{}會(huì)爬樹(shù)')cat=Cat()cat.speciality()運(yùn)行結(jié)果是:貓會(huì)抓老鼠貓會(huì)爬樹(shù)>>>從運(yùn)行結(jié)果可以看到,子類(lèi)Cat重寫(xiě)了父類(lèi)Felines的父類(lèi)的speciality()方法super()函數(shù)如果子類(lèi)重寫(xiě)了父類(lèi)的方法,但仍希望調(diào)用父類(lèi)中的方法,那么可以使用super()函數(shù)實(shí)現(xiàn)。super()只能在子類(lèi)中使用,用于調(diào)用父類(lèi)中的方法。super().方法名()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()super().speciality()任務(wù)實(shí)現(xiàn)03設(shè)計(jì)人機(jī)猜拳游戲
#設(shè)計(jì)人機(jī)猜拳游戲importrandomclassPlayer:def__init__(self):self.dict={0:'剪刀',1:'石頭',2:'布'}#手勢(shì)defgesture(self):player_input=int(input("請(qǐng)輸入(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]設(shè)計(jì)人機(jī)猜拳游戲
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"電腦出的手勢(shì)是{aiplayer},恭喜,你贏了!")elif(player=='剪刀'andaiplayer=='剪刀')or\(player=='石頭'andaiplayer=='石頭')\or(player=='布'andaiplayer=='布'):print(f"電腦出的手勢(shì)是{aiplayer},打成平局了!")else:print(f"電腦出的手勢(shì)是{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()任務(wù)總結(jié)俗話說(shuō)“老鼠的兒子會(huì)打洞”,這句話說(shuō)出了自然界的繼承關(guān)系。Python中類(lèi)與類(lèi)之間也同樣具有繼承關(guān)系,其中被繼承的類(lèi)稱為父類(lèi)或基類(lèi),繼承的類(lèi)稱為子類(lèi)或派生類(lèi)。子類(lèi)在繼承父類(lèi)時(shí),會(huì)自動(dòng)擁有父類(lèi)中的方法和屬性。當(dāng)子類(lèi)只繼承一個(gè)父類(lèi)稱為單繼承。子類(lèi)繼承父類(lèi)后,就擁有了從父類(lèi)繼承的屬性和方法,它既可以調(diào)用自己的方法,也可以調(diào)用從父類(lèi)繼承的方法。當(dāng)一個(gè)子類(lèi)繼承多個(gè)父類(lèi)時(shí)稱為多繼承。如果子類(lèi)具有多個(gè)父類(lèi),也自動(dòng)擁有所有父類(lèi)的公有成員。謝謝觀看定義類(lèi)和創(chuàng)建對(duì)象任務(wù)描述類(lèi)和對(duì)象是面向?qū)ο蟮某绦蛟O(shè)計(jì)中兩個(gè)非常重要的概念。本任務(wù)要求掌握類(lèi)和對(duì)象的概念、定義和創(chuàng)建的方法,為后續(xù)面向?qū)ο蟮木幊檀蛳聢?jiān)實(shí)的基礎(chǔ)。01類(lèi)的概念及定義02對(duì)象及其創(chuàng)建類(lèi)的概念及其定義01類(lèi)和對(duì)象面向?qū)ο蟮乃枷胫刑岢隽藘蓚€(gè)概念:類(lèi)和對(duì)象。類(lèi):類(lèi)是對(duì)多個(gè)對(duì)象共同特征的抽象描述,它是對(duì)象的模板。將具有相同屬性及相同行為的一組對(duì)象稱為類(lèi)(class)。類(lèi)提供一個(gè)抽象的描述,其內(nèi)部包括屬性和方法兩個(gè)主要部分,類(lèi)可以說(shuō)是創(chuàng)建對(duì)象時(shí)所使用的模板。類(lèi)的定義類(lèi)中可以定義數(shù)據(jù)成員即屬性和成員函數(shù)即方法,屬性用于描述對(duì)象特征,方法用于描述對(duì)象行為。定義格式如下:class類(lèi)名:
屬性名=屬性值def方法名(self):
方法體class類(lèi)名(object):
屬性名=屬性值def方法名(self):
方法體注意:類(lèi)名采用駝峰命名法。或類(lèi)的定義譬如:classCar:wheel=4name=“寶馬”defdirve(self):print(“開(kāi)車(chē)”)defstop(self):print(“停車(chē)”)classStudent(object):age=19grade=“university”defstudy(self):print(“我愛(ài)學(xué)習(xí)”)defexper(self):print(“我愛(ài)實(shí)驗(yàn)”)對(duì)象及創(chuàng)建02對(duì)象的概念對(duì)象(object)是現(xiàn)實(shí)世界中可描述的事物,它可以是有形的也可以是無(wú)形的。對(duì)象可以是有生命的個(gè)體,譬如,一個(gè)人或一只鳥(niǎo)。對(duì)象也可以是無(wú)生命的個(gè)體,譬如,一輛車(chē)或一臺(tái)電腦。對(duì)象還可以是一個(gè)抽象的概念,譬如,天氣的變化或一場(chǎng)運(yùn)動(dòng)會(huì)。對(duì)象是構(gòu)成世界的一個(gè)獨(dú)立單位,它由數(shù)據(jù)(描述事物的屬性)和作用于數(shù)據(jù)的操作(體現(xiàn)事物的方法)構(gòu)成一個(gè)獨(dú)立整體。創(chuàng)建對(duì)象類(lèi)定義完成后不能直接使用,需要實(shí)例化為對(duì)象才能實(shí)現(xiàn)其意義。對(duì)象的創(chuàng)建:對(duì)象名=類(lèi)名()譬如:my_car1=Car()my_car2=Car()stu1=Student()stu2=Student()訪問(wèn)對(duì)象成員若想在程序中真正地使用對(duì)象,需掌握訪問(wèn)對(duì)象成員的方法。對(duì)象成員分為屬性和方法,其訪問(wèn)格式分別如下:譬如:my_my_car1.drive()my_car2.wheelMy_car2.stop()stu1.gradestu1.study()stu2.agestu2.study()對(duì)象名.屬性對(duì)象名.方法()訪問(wèn)限制類(lèi)中定義的屬性和方法都默認(rèn)為公有屬性和方法,由該類(lèi)創(chuàng)建的對(duì)象可以任意訪問(wèn)類(lèi)的公有成員。為了契合封裝原則,保證類(lèi)成員不被對(duì)象輕易訪問(wèn)。Python支持將類(lèi)中的成員設(shè)置為私有成員,在一定程度上限制了對(duì)象對(duì)類(lèi)成員的訪問(wèn)。創(chuàng)建私有成員
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五測(cè)繪合同十
- 車(chē)輛無(wú)償租賃協(xié)議
- 的個(gè)人聘用合同二零二五年
- 基于相位偏折的線陣2.5d成像算法
- 基坑支護(hù)噴射混凝土計(jì)算案例
- 代理授權(quán)書(shū)范例二零二五年
- 貿(mào)易安全培訓(xùn)管理制度
- 運(yùn)輸砂石公司管理制度
- 鎮(zhèn)定鎮(zhèn)痛患者管理制度
- 車(chē)輛管理制度及獎(jiǎng)制度
- 汽車(chē)維修公務(wù)車(chē)輛定點(diǎn)維修車(chē)輛保養(yǎng)投標(biāo)方案
- 歌曲Wonderful U:美妙的你.中英互譯
- 部編教材教讀課教學(xué)課例例說(shuō)課件
- 冀教2011版四年級(jí)英語(yǔ)下冊(cè)《Lesson23MyFavouriteSchoolWork》評(píng)課稿
- 設(shè)備安裝調(diào)試驗(yàn)收單
- 綜合能力測(cè)試真題和答案
- 雙眼視與斜視弱視學(xué)智慧樹(shù)知到答案章節(jié)測(cè)試2023年溫州醫(yī)科大學(xué)
- Q-CR 783.1-2021 鐵路通信網(wǎng)絡(luò)安全技術(shù)要求 第1部分:總體技術(shù)要求
- GB/T 27548-2011移動(dòng)式升降工作平臺(tái)安全規(guī)則、檢查、維護(hù)和操作
- GB/T 24538-2009墜落防護(hù)緩沖器
- GB/T 13738.3-2012紅茶第3部分:小種紅茶
評(píng)論
0/150
提交評(píng)論