標籤:ice log input tpc 調用 tps 地址 匯入 open
什麼是反射
光在兩種物質分介面上改變傳播方向又返回原來物質中的現象,叫反射!
以上,是反射的物理定義,與python中的反射概念,完全沒有任何關係
書歸正傳:反射
就是通過字串的形式,操作對象相關的屬性
反射的相關函數:
hasattr(object,"name")#返回bool類型,判斷object的命名空間中是否存在name這個名字#存在返回True#不存在返回Flase
obj = getattr(object,"name")#獲得Object中名稱為name的記憶體位址#name可以是一個方法,也可以是一個屬性
setattr(Object,"name","egon")#在Object中添加一個name名字,並賦值egon#在Object的__dict__中就可以看到{"name":"egon"}了
delattr(Object,"name")#在Object中刪除名稱為name的記憶體位址
為什麼要用反射,反射有什麼優勢
實現可插拔機制
例如:程式員A負責寫模組,程式員B負責調用,當程式員A的模組沒有完成,程式員B依然可以將程式碼完成,而且與程式員A的工作不相衝突
程式碼範例:
1 # 編輯者:閆龍2 class ftpc:3 def __init__(self,x):4 print("come no baby",x)5 def getFile(self):6 print("反正裡面有檔案")7 def upFile(self):8 print("你就當上傳成功了一個叫FuckEgon的檔案")程式員A的未完成模組
1 # 編輯者:閆龍 2 import FtpClient 3 class FtpS: 4 def __init__(self): 5 print("服務端已開啟") 6 def Go(self): 7 ftpc = FtpClient.ftpc("egon") 8 while True: 9 userin = input(">>>:")10 if(hasattr(ftpc,userin)):#在這裡就是判斷程式員A未完成的代碼中是否存在某方法,如果存在則執行,不存在則提示指令錯誤11 ftpp = getattr(ftpc,userin)12 ftpp()13 else:14 print("指令錯誤")15 continue16 17 f = FtpS()18 f.Go()程式員B的實現
動態匯入模組
我們在匯入模組的時候會用到Import 模組名,而這個模組名並不是一個字串,那麼使用應的好處就是可以對應字串轉成相應的模組
程式碼範例:
1 #官方推薦版:egon坑貨版 2 import importlib #匯入一個improtlib模組 3 Choice = input(">>>")#擷取使用者輸入的資訊(模組名字) 4 importlib.import_module(Choice)#將使用者輸入的字串變成模組的名字並匯入模組 5 6 #矮根兒先入為主版:官方根本不推薦,但是如果你非要這麼寫的話,請在寫之前註明: 7 #<林海峰教的> 8 Choice = input(">>>")#擷取使用者輸入的資訊(模組名字) 9 __import__(Choice)#將使用者輸入的字串變成模組的名字並匯入模組10 #</林海峰教的>
Python概念-反射之文化底蘊版:反正射了