一、简述:反射是指在程序运行的过程中可以动态地获取对象的信息。
二、作用:实现了语言的动态性。
三、如何实现反射
1、通过dir功能查看对象的可调用属性的名字的字符串形式的列表。
2、通过dict功能调出对象的可调用属性的字典,字典的key即上条的字符串,所以可以通过字符串调用对应的属性值,就实现了反射。
class Human: def __init__(self, name, age): self.name = name self.age = age def show_name(self): print(self.name) obj = Human('tom', '18') attribute_list = dir(obj) # 获取属性名称字符串形式的列表 print(obj.__dict__.get('age')) # 以字符串形式的属性名为key,调用对应的属性值
四、反射相关的四个内置函数:通过字符串形式的属性名来操作属性值
1、hasattr:判断目标对象是否有该属性
2、getattr:返回目标对象的该属性
3、setattr:修改目标对象的该属性的值为新指定的值
4、delattr:删除目标对象的该属性
class Human: def __init__(self, name, age): self.name = name self.age = age def show_name(self): print(self.name) obj = Human('tom', '18') print(hasattr(obj, 'name')) # 判断 obj 是否有属性 'name' 结果为 True setattr(obj, 'name', 'jan') # 将 obj 的 'name' 属性的值改为 'jan' print(getattr(obj, 'name')) # 结果为 jan delattr(obj, 'name') # 删除 obj 的 'name' 属性 print(getattr(obj, 'name')) # 报错提示为 AttributeError: 'Human' object has no attribute 'name'