<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ## 接口 ### 為何要用接口 接口提取了一群類共同的函數,可以把接口當做一個函數的集合。然后讓子類去實現接口中的函數。 這么做的意義在于歸一化,什么叫歸一化,就是只要是基于同一個接口實現的類,那么所有的這些類產生的對象在使用時,從用法上來說都一樣。 歸一化的好處在于: 1. 歸一化讓使用者無需關心對象的類是什么,只需要的知道這些對象都具備某些功能就可以了,這極大地降低了使用者的使用難度。 2. 歸一化使得高層的外部使用者可以不加區分的處理所有接口兼容的對象集合 就好象linux的泛文件概念一樣,所有東西都可以當文件處理,不必關心它是內存、磁盤、網絡還是屏幕。 ### 模仿interface 在python中根本就沒有一個叫做interface的關鍵字,如果非要去模仿接口的概念,可以借助第三方模塊:[zope.interface模塊](http://pypi.python.org/pypi/zope.interface). 也可以使用繼承,其實繼承有兩種用途 一:繼承基類的方法,并且做出自己的改變或者擴展(代碼重用):實踐中,繼承的這種用途意義并不很大,甚至常常是有害的。因為它使得子類與基類出現強耦合。 二:聲明某個子類兼容于某基類,定義一個接口類(模仿java的Interface),接口類中定義了一些接口名(就是函數名)且并未實現接口的功能,子類繼承接口類,并且實現接口中的功能 ~~~ class Interface:#定義接口Interface類來模仿接口的概念 def read(self): #定接口函數read pass def write(self): #定義接口函數write pass class Txt(Interface): #文本,具體實現read和write def read(self): print('文本數據的讀取方法') def write(self): print('文本數據的讀取方法') class Sata(Interface): #磁盤,具體實現read和write def read(self): print('硬盤數據的讀取方法') def write(self): print('硬盤數據的讀取方法') class Process(Interface): def read(self): print('進程數據的讀取方法') def write(self): print('進程數據的讀取方法') ~~~ 上面的代碼只是看起來像接口,其實并沒有起到接口的作用,子類完全可以不用去實現接口 ,這就用到了抽象類 ## 抽象類 ### **1 什么是抽象類** 與java一樣,python也有抽象類的概念但是同樣需要借助模塊實現,抽象類是一個特殊的類,它的特殊之處在于只能被繼承,不能被實例化 ### **2 為什么要有抽象類** 如果說類是從一堆對象中抽取相同的內容而來的,那么抽象類就是從一堆類中抽取相同的內容而來的,內容包括數據屬性和函數屬性。 * 從設計角度去看,如果類是從現實對象抽象而來的,那么抽象類就是基于類抽象而來的 * 從實現角度來看,抽象類與普通類的不同之處在于:抽象類中只能有抽象方法(沒有實現功能),該類不能被實例化,只能被繼承,且子類必須實現抽象方法。 ### **3. 在python中實現抽象類** ~~~ #一切皆文件 import abc #利用abc模塊實現抽象類 class All_file(metaclass=abc.ABCMeta): all_type='file' @abc.abstractmethod #定義抽象方法,無需實現功能 def read(self): pass #'子類必須定義讀功能' @abc.abstractmethod #定義抽象方法,無需實現功能 def write(self): pass #'子類必須定義寫功能' class Txt(All_file): #子類繼承抽象類,但是必須定義read和write方法 def read(self): print('文本數據的讀取方法') def write(self): print('文本數據的讀取方法') class Sata(All_file): #子類繼承抽象類,但是必須定義read和write方法 def read(self): print('硬盤數據的讀取方法') def write(self): print('硬盤數據的讀取方法') wenbenwenjian=Txt() yingpanwenjian=Sata() #這樣大家都是被歸一化了,也就是一切皆文件的思想 wenbenwenjian.read() yingpanwenjian.write() print(wenbenwenjian.all_type) print(yingpanwenjian.all_type) ~~~ ## **抽象類與接口** 抽象類的本質還是類,指的是一組類的相似性,包括數據屬性(如all\_type)和函數屬性(如read、write),而接口只強調函數屬性的相似性。 抽象類是一個介于類和接口之間的一個概念,同時具備類和接口的部分特性,可以用來實現歸一化設計
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看