反射(python内置方法)
1.反射定义
''' 反射: ******* 反射指的是通过 “字符串” 对 对象的属性进行操作。 - hasattr: 通过 “字符串” 判断对象的属性或方法是否存在。 - getattr: 通过 “字符串” 获取对象的属性或方法。 - setattr: 通过 “字符串” 设置对象的属性或方法。 - delattr: 通过 “字符串” 删除对象的属性或方法。 # 注意: 反射的四个方法是python内置的。
2.使用方法
# class Foo: # def __init__(self, x, y): # self.x = x # self.y = y # # # foo_obj = Foo(10, 20) # hasattr # 通过字符串x 判断对象中是否有 x属性 # print(hasattr(foo_obj, 'x')) # True # print(hasattr(foo_obj, 'y')) # True # print(hasattr(foo_obj, 'z')) # False # getattr # res = getattr(foo_obj, 'x') # print(res) # 10 # 若属性不存在,则返回默认值 # res = getattr(foo_obj, 'z', '默认值') # print(res) # 默认值 # setattr # 为foo_obj设置一个属性z,值为30 # setattr(foo_obj, 'z', 30) # print(hasattr(foo_obj, 'z')) # True # delattr # delattr(foo_obj, 'x') # print(hasattr(foo_obj, 'x')) # False
实例
反射应用: 将用户交互的结果反射到具体的功能执行 class FileControl: 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_control_obj = FileControl() file_control_obj.run()