反射指的是经过 “字符串” 对对象的属性和方法进行操做,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()