反射指的是經過 「字符串」 對對象的屬性和方法進行操做,python內置的方法python
經過 「字符串」 判斷對象的屬性或方法是否存在code
經過 「字符串」 獲取對象的屬性或方法對象
經過 「字符串」 設置對象的屬性或方法ip
經過 「字符串」 刪除對象的屬性或方法字符串
class Foo: x = 10 y = 20 def date(self): print('天王蓋地虎,小雞燉蘑菇') obj = Foo() # 判斷對象屬性或方法是否存在 print(hasattr(obj, 'x')) # True print(hasattr(obj, 'z')) # False # #獲取對象方法或屬性 print(getattr(obj, 'x')) # 10 # # 能夠設置默認值,值不存在時返回默認值,不然會報錯 print(getattr(obj, 'z', '默認值')) # 默認值 # # 獲取對象的方法 res = getattr(obj, 'date') res() # 天王蓋地虎,小雞燉蘑菇 # 設置對象方法或屬性 # 此處設置的對象屬性是在對象下面的,不是在類下面 setattr(obj, 'z', 30) print(hasattr(obj,'z')) # True setattr(obj, 'x', 100) print(getattr(obj, 'x')) # 100 # 刪除對象屬性或方法,只能刪除對象下的屬性或方法,類裏的無法刪除,全部顯示仍是有x delattr(obj, 'x') print(hasattr(obj, 'x')) # True
反射應用get
class File: def run(self): while True: # 讓用戶輸入上傳或下載命令 user_input = input('請輸入upload上傳或download下載:').strip() # 判斷輸入的命令是否存在,並調用相應的方法 if hasattr(self, user_input): func = getattr(self, user_input) func() else: print('輸入有誤') def upload(self): print('正在上傳...') def download(self): print('正在下載...') file_obj = File() file_obj.run()