<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ## 反射用途 反射可以通過字符串映射到對象的屬性. ### 簡單舉例: 實例化了一個類,類中有多個屬性,現在讓用戶輸入,然后打印輸入的屬性, 但是對象不能直接使用字符串,會報'AttributeError 屬性錯誤' ~~~ class cl: country='China' def __init__(self,name,age): self.name=name self.age=age obj=cl('noah',22) inp='name' #模擬用戶輸入 print(obj.name) #結果 noah print(obj.inp) #報錯AttributeError: 'cl' object has no attribute 'inp' print(getattr(obj,inp,None)) #結果 noah #使用getattr方法做反射就不會報錯 ~~~ 這種時候就需要用到反射的方法把字符串印射為對象的屬性或方法 ## 反射四大將軍 python面向對象中的反射:通過字符串的形式操作對象相關的屬性。python中的一切事物都是對象(都可以使用反射) ### 用途簡述 * hasattr(object,name) 判斷object中有沒有一個name字符串對應的方法或屬性 * getattr(object, name, default=None) 獲取object中name字符串對應的方法或屬性,如果不存在則返回None,可以定義其他返回值 * setattr(object, name, values) 修改object中name屬性為values值,name屬性不存在,則新增改屬性 * delattr(object,name) 刪除object對象中的name屬性 ### 簡單案例 判斷用戶的輸入對象的方法是否存在,存在則執行相關方法 ``` class service: def run(self): while True: chioce=input('>>: ').strip() if hasattr(self,chioce): fun=getattr(self,chioce) fun() def get(self): print('get.........') def put(self): print('put.........') obj=service() obj.run() #運行: >>: abc >>: get get......... ``` ### 反射的好處-實現可插拔 可以事先定義好接口,接口只有在被完成后才會真正執行,這實現了即插即用,這其實是一種‘后期綁定’,即你可以事先把主要的邏輯寫好(只定義接口),然后后期再去實現接口的功能 有倆程序員lili和egon,lili的程序需要用到egon所寫的類,但是egon沒有完成他寫的類,用了反射機制lili可以繼續完成自己的代碼,等egon后面再完成類的定義并且去實現lili想要的功能。 **egon還沒有實現全部功能** ~~~ class FtpClient: 'ftp客戶端,但是還么有實現具體的功能' def __init__(self,addr): print('正在連接服務器[%s]' %addr) self.addr=addr ~~~ **不影響lili的代碼編寫** ~~~ #from module import FtpClient f1=FtpClient('192.168.1.1') if hasattr(f1,'get'): func_get=getattr(f1,'get') func_get() else: print('---->不存在此方法') print('處理其他的邏輯') ~~~
                  <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>

                              哎呀哎呀视频在线观看