<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 功能強大 支持多語言、二開方便! 廣告
                ## 概述 同一個對象的不同屬性之間可能存在依賴關系。當某個屬性被修改時,我們希望依賴于該屬性的其他屬性也同時變化。這時,我們不能通過`__dict__`的方式來靜態的儲存屬性。 Python提供了多種即時生成屬性的方法。其中一種稱為**特性**(property)。特性是特殊的屬性。比如我們為chicken類增加一個特性adult。當對象的age超過1時,adult為True;否則為False。 #### 方案1 --> 通過對象方法實現 ``` class chicken(bird): fly = False def __init__(self, age): self.age = age def getAdult(self): if self.age > 1.0: self.adult = True else: self.adult = False ``` 獲得adult對象屬性的方法 ``` >>> summer = chicken(2) #實例化 >>> summer.getAdult() #調用getAdult()方法,給adult屬性賦值 >>> summer.adult #獲取adult屬性 ``` #### 方案2 --> 使用三元選擇,實用性較低 ``` class bird(object): feather = True class chicken(bird): fly = False def __init__(self, age): self.age = age self.adult = True if self.age > 1.0 else False ``` 獲得adult對象屬性的方法 ``` >>> summer = chicken(2) #實例化 >>> summer.adult #獲取adult屬性 ``` #### 方案3 使用property,實用性更強 ``` class bird(object): feather = True class chicken(bird): fly = False def __init__(self, age): self.age = age def getAdult(self): if self.age > 1.0: return True else: return False adult = property(getAdult) # @property # def adult(self): # if self.age > 1.0: return True # else: return False ``` 獲得adult對象屬性的方法 ``` >>> summer = chicken(2) #實例化 >>> summer.adult #獲取adult屬性 ``` #### 方案4 使用特殊方法__getattr__ ``` class bird(object): feather = True class chicken(bird): fly = False def __init__(self, age): self.age = age def __getattr__(self, name): if name == 'adult': if self.age > 1.0: return True else: return False else: raise AttributeError(name) ``` 每個特性需要有自己的處理函數,而`__getattr__`可以將所有的即時生成屬性放在同一個函數中處理。`__getattr__`可以根據函數名區別處理不同的屬性。比如上面我們查詢屬性名male的時候,raise AttributeError。 (Python中還有一個`__getattribute__`特殊方法,用于查詢任意屬性。`__getattr__`只能用來查詢不在`__dict__`系統中的屬性) `__setattr__`(self, name, value)和`__delattr__`(self, name)可用于修改和刪除屬性。它們的應用面更廣,可用于任意屬性。
                  <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>

                              哎呀哎呀视频在线观看