<wbr id="wsjqy"></wbr>

          <form id="wsjqy"></form>
          <sub id="wsjqy"></sub>
          <nav id="wsjqy"><listing id="wsjqy"></listing></nav>
          更多課程 選擇中心


          Python培訓

          400-111-8989

          Python面向對象編程:數據封裝、繼承和多態

          • 發布:Python培訓
          • 來源:機器學習實驗室
          • 時間:2019-06-27 15:51

          小編今天帶大家學習一下 Python 中面向對象程序設計以及數據封裝、繼承和多態三大特性。

          在 Python 中所有數據類型都可以視為對象,我們也可以自定義對象,自定義的對象數據類型就是面向對象中類(Class)的概念。Class 是一種抽象概念,比如說定義一個籃球運動員的 Class,指的是球員這個概念,而實例(Instance)則是一個個具體的球員,比如科比和麥迪是兩個具體的球員。所以面向對象的程序設計思想是先抽象出 Class,然后根據 Class 創建 Instance。通常一個 Class 既包含數據也包含操作數據的方法。

          類和實例

          作為面向對象最重要的概念,必須牢記要先創建抽象的類(Class)然后根據類創建具體的實例對象。下面以籃球運動員類為例,在 Python 中進行定義:

          class Player(object): 
          
          pass

          關鍵字 class 后面是類名 Player,括號里面是該類所繼承的對象,如果沒有繼承類一般都寫做 object 類。定義好類之后,就可以根據 Player 類創建 Player 的實例,創建實例可以通過類名+( )來實現。

          >>> Kobe = Player()
          
          >>> Kobe<__main__.player object at 0x10a67a209>
          
          >>> Player
          
          <class '__main__.Player'>

          從結果可以看到變量 Kobe 指向的就是一個 Player 實例,而 Player 本身則是一個類。類作為一個具有模板作用的定義,我們可以在創建實例時將一些必備的屬性定義到里面去。Python 中通過定義一個特殊的 __init__ 方法來實現:

          class Player(object):
          
           def __init__(self, name, points):
          
           self.name = name 
          
           self.points = points

          需要強調的一點是,__init__ 方法的第一個參數永遠都是 self,可以理解為創建的實例本身,定義中各類屬性都綁定到 self。定義完改方法后在傳參的時候就要按照定義的參數方式進行傳參了:

          >>> Kobe = Player('Kobe Bryant', 30.3)
          
          >>> 
          
          Kobe.name'Kobe Bryant'
          
          >>> Kobe.points
          
          30.3

          類的方法與普通函數并沒有太大區別,類定義中函數第一個參數都是 self,除此之外也可以傳入普通函數一樣的默認參數、可變參數、關鍵字參數和命名關鍵字參數等。

          數據封裝

          數據封裝是面向對象編程的第一大特征。所謂數據封裝,就是指在類定義時指定訪問內部數據的方式,這種方式通過在類中定義函數來實現,這樣數據就被封裝起來了。而封裝數據的函數是和類本身關聯在一起的,我們稱之為類的方法。

          class Player(object):
          
          def __init__(self, name, score):
          
          self.name = name
          
          self.points = points
          
          def print_points(self):
          
          print('%s: %s' % (self.name, self.points))

          訪問對象數據時:

          >>> Kobe.print_points()
          
          Kobe Bryant: 30.3

          數據封裝還有個好處就是可以給類添加新的方法,直接在定義類的函數中進行添加即可:

          class Student(object):
          
          ... def get_points(self):
          
          if self.points >= 28: print("You are a mvp player!")
          
          elif self.points >= 20: print("You are an all star player!")
          
          else: 
          
          print("hurry up!")

          使用該方法訪問數據:

          >>> Kobe.get_points()You are a mvp player!

          繼承

          面向對象程序設計的第二大特征叫做繼承。當我們定義一個 Class 的時候,可以從當前環境下某個現有的類進行繼承,新定義的類就可以稱之為子類,而之前存在的類可以稱之為父類或者是基類。

          還是按照前面的類定義的例子,對 Player 類定義一個 do 的方法:

          class Player(object):
          
          def do(self):
          
          print('Player is shooting')

          當我們需要定義一個子類 AllStar 類的時候就可以直接從 Player 類繼承:

          class AllStar(Player): pass

          對于 Player 類來說,AllStar 類就是它的子類,而對于 AllStar 類來說,Player類就是它的父類。繼承的最大好處在于子類可以獲得父類的全部功能,由于父類 Player 有著 do 方法,那它的子類 AllStar 類啥也不用定義就直接獲取了父類的方法:

          Curry = Curry()
          
          Curry.do()"Player is shooting"

          繼承的另一個好處在于可以對所繼承的父類的功能進行修改,繼承了老子的本領還可以對該本領推陳出新,子類厲害喲。

          多態

          當子類和父類同時存在某種方法時,子類的方法會覆蓋父類的方法。按前例就是當Player 父類和 AllStar 子類同時存在 do 方法時,子類會對父類的方法進行覆蓋。我們先來看 Curry 這個對象的數據類型:

          >>> isinstance(Curry, AllStar)True
          
          >>> isinstance(Curry, Player)True

          看來 Curry 這個實例對象不僅是 AllStar 也是一個 Player。原來 AllStar 這個類作為子類是從 Player 這個父類上繼承下來的!子承父業!

          因此,在一段繼承關系中,如果某個實例對象的數據類型是某個子類,那它的數據類型也可以被看作是父類。但反過來可不行,不能亂了輩份。對于在父類下任何新增的子類都不必對該類的方法進行修改,任何依賴于以父類名作為參數的函數都可以不加修改正常運行,其原因就在于多態。多態的好處在于:

          對于一個未知變量,我們在只知道它的父類類型而對其子類類型一無所知的情況下可以放心地調用相應的方法,而調用的方法是具體作用在哪個對象上,由運行時確定的對象類型所決定。多態的厲害支持在于:調用的時候只管拿來調用并不管其中的調用細節。當我們要新增一個 Player 子類時,只要保證 do 方法編寫無誤,對之前代碼是如何調用的并不關心。

          免責聲明:內容和圖片源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

          預約申請免費試聽課

          填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

          上一篇:推薦一本可以用Python開發網站的好書——Python Web開發實戰
          下一篇:Python中lambda表達式的常見用法

          Python中類的屬性有哪幾種

          Python語法你知道多少

          Python 中常見的配置文件寫法

          Python爬蟲可以做什么

          • 掃碼領取資料

            回復關鍵字:視頻資料

            免費領取 達內課程視頻學習資料

          • 視頻學習QQ群

            添加QQ群:1143617948

            免費領取達內課程視頻學習資料

          Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

          選擇城市和中心
          黑龍江省

          吉林省

          河北省

          湖南省

          貴州省

          云南省

          廣西省

          海南省

          网友自拍 偷拍 校园性爱青青草曰逼视屏老鸭窝国产偷自视频区视频 百度 好搜 搜狗
          <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>