<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 功能強大 支持多語言、二開方便! 廣告
                ## 概述 類是封裝邏輯與數據的方式 #### 類間關系 * 依賴(“uses-a”) 一個類的方法操縱另一個類的對象 * 聚合(“has-a”) 類A的對象包含類B的對象 * 繼承(“is-a”) 描述特殊與一般的關系 ### 面向對象編程的原則 封裝(Encapsulation) * 隱藏實現方案的細節 將**代碼與數據**捆綁在一起的一種編程機制,用于保證程序和數據不受外界干擾且不會被誤用。 * 繼承(Inheritance) 一個對象獲得另一個對象屬性的過程,用于實現按層分類的概念 一個深度繼承的類繼承了類層次中每個祖先的所有屬性 * 多態(Polymorphism) 允許一個接口被多個通用的類動作使用的特性,一個接口,多種方法,降低程序復雜性 ### 類與模塊的關系? 類總是位于模塊中,類似模塊的屬性,類和模塊都是命名空間 ### 類屬性的創建? 類屬性的創建時通過把屬性賦值給類對象實現的,類屬性由class語句中頂層賦值語句產生的;此外任何引用類對象的地方也可以對其屬性賦值,從而創建屬性。 ### 實例屬性的創建? 實例屬性是通過實例對象屬性賦值來創建,實例屬性一般在class語句中的方法函數中對self參數賦值屬性而創建的。此外任何引用實例對象的地方也可以對其屬性賦值,從而創建屬性。一般來說,實例屬性都是在__init__構造函數中初始化。 ### self有什么意義? self通常是類方法中的第一個參數名稱,python會自動填入**實例對象**,這個對象的位置才是重點。 ### 類和其他程序單元相比有什么優點? * 多重實例 > 類是產生對象的工廠,每次調用一個類,就會產生一個擁有獨立命名空間的新對象,每個對象都能讀取類的屬性,并在自己的命名空間中存儲數據,這些數據對于每個對象來說都不同。 * 通過繼承進行定制 > 子類可以繼承父類,在父類的基礎上加以改造,從而擴充這個類。 * 運算符重載 > 通過特定的協議方法,類可以定義對象來響應在內置類型上的幾種運算。 ```python #!/usr/bin/env python # coding: utf-8 def echo(): print 'echo' class GoldenFish(): living_area = 'water' __memory_time = '3 seconds' @staticmethod def breath(): print 'Fish is breathing.' def __init__(self, name, gender): self.name = name self.__gender = gender def eat(self, eat_what, eat_howmuch): print self.name, 'eat', eat_howmuch, eat_what, 'in', self.living_area def memory(self): print 'Fish\'s memory only has %s' % self.__memory_time def __thinkwhat(self): print self.name, 'is think what to eat tommorrow' def sayideas(self): self.__thinkwhat() print self.name, 'is', self.__gender @property def life_span(self): print 'Golden fish can live for ten years' # 先實例化一個對象fishA fishA = GoldenFish('fishA', 'male') # 1 靜態和動態, 可以這樣理解,靜態的是類和對象共有的,動態的是對象私有的 # 靜態字段和方法,類和對象都可以訪問;動態字段和方法只有對象能訪問 # 1.1 通過類訪問靜態字段 print GoldenFish.living_area # 1.2 通過類訪問靜態方法 GoldenFish.breath() # 1.3 類不能訪問動態字段,報錯 # print GoldenFish.name # 1.4 類不能訪問動態方法,報錯 # GoldenFish.eat('grass', 10) # 1.5 通過對象訪問靜態字段 print fishA.living_area # 1.6 通過類訪問靜態方法 fishA.breath() # 1.7 類不能訪問動態字段,報錯 print fishA.name # 1.8 類不能訪問動態方法,報錯 fishA.eat('grass', 10) # 2 私有和公有,這是相對于類內和類外來說的 # 私有字段和方法,只能在類內訪問,公有字段和方法,類內外都可以訪問 # 在類外如果必須訪問私有字段和方法,有如下方法,不推薦這樣的做法 fshA_GoldenFish____thinkwhat() #包括類和對象的私有方法 print fshA_GoldenFish__memory_time # 包括類和對象的私有字段 # 3 有些函數還是要定義在類外,如echo()函數 ``` #### 什么時候用靜態方法? 假如有一個關于操作MsSql數據庫的類,使用動態方法,如果有100個業務,需要在(堆|棧)內存創建100個對象,占用空間會比較多; ```python ms = MsSql() ms.add(sql) ``` 如果使用靜態方法,直接通過類執行即可,不用創建對象,代碼只在code區存儲一份 > 因此,靜態方法適用于實例化較多對象的場景來減少實例化所帶來的內存壓力。 ``` MsSql.add(sql) ``` ```python class MsSql(): # 動態方法 def add(self, sql): pass def delete(self, sql): pass def update(self, sql): pass def select(self, sql): pass # 靜態方法 @staticmethod def add(sql): pass @staticmethod def delete(sql): pass @staticmethod def update(sql): pass @staticmethod def select(sql): pass ``` #### 什么時候使用特性property? 使用特性property模擬字段的訪問方式 #### 什么時候使用私有的 不想讓別人看見的或內部處理的 #### 類和字典的關系 類可以打包像字典這樣的信息。 * 字典 ![](http://om4h63cja.bkt.clouddn.com/17-3-14/3731443-file_1489477248006_158e6.png) * 類 ![](http://om4h63cja.bkt.clouddn.com/17-3-14/14080462-file_1489477295621_871f.png)
                  <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>

                              哎呀哎呀视频在线观看