日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python基础入门系列】第10天:Python 类与对象

發布時間:2023/12/20 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python基础入门系列】第10天:Python 类与对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?首先,我已經假定你是個萌新或已經看了無數遍的垃圾文章,然后依然搞不懂類和對象,但是呢起碼知道有類和對象這么兩個玩意兒,我覺得有必要找一篇生動形象的示例來講解。

由于你可能沒有編程經驗,

所以無法從學過的編程語言里通過類比去理解Python的‘類和對象’。咱們用生活中的例子來說說:

比如你是玩具廠的工程師,你要制作一個機器,可以批量制作鴨子形狀的玩具,也許你的思路如下:

def makeDuckMoth():#這里可以放其他制作細節 print('鴨子嘴巴制作完畢') def makeDuckEar(): #這里可以放其他制作細節 print('鴨耳朵制作完畢') def makeDuckEye(): #這里可以放其他制作細節 print('鴨眼睛制作完畢') def makeDuckHead(): #這里可以放其他制作細節print('鴨頭制作完畢') def makeDuckWing():#這里可以放其他制作細節print('鴨翅膀制作完畢') def makeDuckBody():#這里可以放其他制作細節print('鴨身體制作完畢') def makeDuckFoot(): #這里可以放其他制作細節print('鴨腳制作完畢') def makeDuckMerge():#這里可以放其他制作細節 print('鴨子組裝完畢') makeDuckMoth() #制作鴨嘴巴 makeDuckEar() #制作鴨耳朵 makeDuckEye() #制作鴨眼睛 makeDuckHead() #制作鴨頭 makeDuckWing() #制作鴨翅膀,##注意,豬是沒有翅膀的makeDuckBody() #制作鴨身體makeDuckFoot() #制作鴨腳makeDuckMerge() #合并鴨子的各個部位,組裝成最終鴨子 你發現,自己好厲害,居然學會了整個鴨子的制作流程

?

第二天,老板讓你,制作豬形狀的玩具,難道你的代碼如下:???

def makePigMoth():#這里可以放其他制作細節print('豬嘴巴制作完畢') def makePigEar():#這里可以放其他制作細節print('豬耳朵制作完畢') def makePigEye():#這里可以放其他制作細節print('豬眼睛制作完畢') def makePigHead():#這里可以放其他制作細節print('豬頭制作完畢') def makePigBody():#這里可以放其他制作細節print('豬身體制作完畢') def makePigHand():#這里可以放其他制作細節print('豬手制作完畢') def makePigFoot():#這里可以放其他制作細節 print('4只豬腳制作完畢') def makePigMerge(): #這里可以放其他制作細節print('豬組裝完畢') makePigMoth() #制作豬嘴巴 makePigEar() #制作豬耳朵 makePigEye() #制作豬眼睛 makePigHead() #制作豬頭 makePigBody() #制作豬身體 makePigFoot() #制作4只豬腳 makePigMerge() #合并豬的各個部位,組裝成最終豬

這樣來,你確實完成了工作,但有沒有覺得 有點累?

是不是覺得,豬和鴨子有很多相似之處?

如果你學會了,類的用法,可以非常輕松,下面是類的用法

??

?等等?我先說說

?

  • 類、對象在實際編程中有啥好處,為啥要用它們

  • 再給你解釋怎么去理解它們

  • ?

    ? ?類的好處主要有

    • 方便復用(如果你用函數寫,就要復制整塊代碼,增加了代碼量,增加了出錯率)

    • 方便擴展(函數寫段代碼,若要升級、擴展,都十分復雜,容易出錯,用類來擴展,則方便清晰)

    • 方便維護(因為類是把抽象的東西映射成我們常見的,摸得到的東西,容易理解,維護也方便)

    ?

    ?

    ? ? 舉幾個例子理解:

    類就像是基因的制造圖紙,我們人類,生的小孩,也是兩只手,兩只腳,一個嘴巴,除非變異,否則不會多出一只腳的,之所以這樣有序的發展,是因為我們身體里,有基因這張圖紙控制著我們的繁衍


    現在我們給上面例子中的制作 鴨子、豬 建立一個通用的制作基因表,利用他們相似制作流程?

    建立基因表

    class Animal(object):''' 豬和鴨子的基類(基因圖紙表) '''def __init__(self, name):# 實例化的時候傳入要制作的東西名字,如豬、鴨子 self.name = name def makeMoth(self):#這里可以放其他制作細節print(self.name+'的嘴巴 制作完畢')#這里的self.name就是獲取我們傳入的namedef makeEar(self):#這里可以放其他制作細節print(self.name+'的耳朵 制作完畢')def makeEye(self): #這里可以放其他制作細節 print(self.name+'的眼睛 制作完畢')def makeHead(self): #這里可以放其他制作細節print(self.name+'的頭 制作完畢')def makeBody(self): #這里可以放其他制作細節 print(self.name+'的身體 制作完畢')def makeFoot(self): #這里可以放其他制作細節print(self.name+'的腳 制作完畢')def makeMerge(self): #這里可以放其他制作細節print(self.name+'合并完畢')def makeAll(self): # 一條龍。直接跑完整個流水線self.makeMoth()self.makeEar() self.makeEye()self.makeHead() self.makeBody() self.makeFoot() self.makeMerge()

    ?

    你可以看到,上面的圖紙里,我們沒有放?makeWing() #制作翅膀,那是因為豬不會飛,我們只放豬和鴨子共有的、相同的東西接下來,用這個類,繼承給Pig


    代碼如下

    class Pig(Animal):# 括號里寫Animal,意思是Pig繼承Animal的所有特性,類似你繼承你老爸的基因def makeMoth(self): #這里加詳細的豬嘴巴制作流程,如長嘴巴,有兩個孔 print(self.name+'的嘴巴 制作完畢')def makeEar(self): #耳朵大大的print(self.name+'的耳朵 制作完畢')def makeEye(self): #眼睛小小的print(self.name+'的眼睛 制作完畢')def makeHead(self): #很大的頭 print(self.name+'的頭 制作完畢')def makeBody(self): #略 print(self.name+'的身體 制作完畢')def makeFoot(self): #略 print(self.name+'的腳 制作完畢')def makeMerge(self): #略 print(self.name+'合并完畢')

    ?

    在class Pig中,如 makeMoth函數方法里面,只加入詳細制作豬嘴巴的代碼,不要把制作豬頭的代碼放這里哦

    你發現,class Pig中 沒有了這2段代碼,這是因為,

    如果你繼承別的對象,如Animal后,若完全不修改某些方法屬性,就可以不寫出來(實際還是存在Pig中的)

    def __init__(self, name): self.name = name def makeAll(self): # 一條龍。直接跑完整個流水線 self.makeMoth() self.makeEar()self.makeEye()self.makeHead()self.makeBody() self.makeFoot() self.makeMerge()

    ?

    寫出來意味著,你要覆蓋以前代碼塊里的行為,如 :

    我們寫出了makeMoth,makeEar ...

    意味著我們要把makeMoth里的制作細節改成我們想要的,

    豬和鴨子的嘴巴長得不一樣,制作細節肯定不同,對吧?

    ?

    最后我們用以下代碼,讓機器開始造豬

    pig1 = Pig('豬') #實例化,相當于懷孕 pig1.makeAll() # 開始造豬,相當于在子宮里形成整體

    ?

    現在開始造鴨子的圖紙,繼承Animal,覆蓋某些代碼

    class Duck(Animal): #def makeMoth(self): #這里加詳細的鴨子嘴巴制作流程,如長嘴巴,嘴巴硬print(self.name+'的嘴巴 制作完畢')def makeEar(self): #耳朵很小 print(self.name+'的耳朵 制作完畢')def makeEye(self): #眼睛小小的 print(self.name+'的眼睛 制作完畢')def makeHead(self): #頭很小 print(self.name+'的頭 制作完畢')def makeBody(self): #略 print(self.name+'的身體 制作完畢')def makeFoot(self): #略 print(self.name+'的腳 制作完畢')def makeMerge(self): #略 print(self.name+'合并完畢')def makeWing(self): #增加翅膀的制作流程 #略 print(self.name+'的翅膀 制作完畢')def makeAll(self): #因為增加了翅膀,所以要覆寫這個函數 self.makeMoth() self.makeEar() self.makeEye() self.makeHead() self.makeBody() self.makeFoot() self.makeWing() #插入翅膀制作流程 self.makeMerge()

    然后用以下代碼實例化,開始做鴨子

    duck1 = Duck('鴨子')duck1.makeAll()

    ?

    ?

    以后我們要狗、牛、企鵝,都可以從Animal繼承, ?Animal給我們提供了一個框架,我們只需要在這個框架上,擴展,延伸 就可以很方便的做出任何東西,這就是類的魅力

    ?

    ?

    如果你要做個別的咋辦?

    可以建立一個?足夠通用基類,慢慢擴展, 類似人類的老祖宗,最開始是微生物,后來是猴子

    ?

    class Weishengwu(object): '''假設一開始的老祖宗只會吃東西''' def __init__(self, name):????????????self.name?=?name????????def?eat(self):???????????print('吃東西')#開始進化成魚類class?Fish(Weishengwu):????'''在老祖宗只會吃的基礎上,學會了移動'''????def?move(self):???????????print('移動')#開始進化成猴子class?Houzi(Fish):????'''在魚的基礎上學會了爬樹'''?????def?__init__(self,?name,?love):??#?以前只有名字,現在有了愛好,或許是吃桃子、或許是蕩秋千?? ????????self.name?=?name??????????? ????????self.love?=?love????????def?eat(self):????????#覆寫,因為吃東西的方式可能和魚類不一樣了???????????print('牙齒吃東西')????def?move(self):????????#覆寫,不是在水里移動了,是陸地上移動?????????????????print('腳移動')???????def?Pashu(self):????????? ??print('爬樹')#你可以繼續進化,繼續給他增加任何功

    ?

    總結

    希望可以通過這個生動而形象的示例,幫到你懂得 Python 類與對象的定義和使用。最后再給你個生動形象的比喻,希望你能理解。

    ????類(class): 相當于施工圖紙(blueprint)

    ????對象(object):房子(已經建造好的)

    ?

    參考:

    https://www.runoob.com/python3/python3-namespace-scope.html

    https://www.zhihu.com/search?type=content&q=python%E4%B8%8E%E5%AF%B9%E8%B1%A1

    總結

    以上是生活随笔為你收集整理的【Python基础入门系列】第10天:Python 类与对象的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。