一、什么是反射
Python 是一种动态语言,而反射(reflection)机制被视为动态语言的关键。反射机制指的是在程序的运行过程中,对于任意一个类,都可以知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取程序信息以及动态调用对象的功能称为 反射机制。
反射,本质上就是通过字符的形式去操作对象/模块中的成员。在 Python 中,我们可以通过四个内置函数去实现反射相关的功能。
python">getattr(object, name) # 获取对象中的成员
getattr(object, name, default) # 获取对象中的成员,如果没有则返回default指定的指
setattr(object, name, value) # 设置对象中的成员
hasattr(object, name) # 判断对象的成员是否存在
delattr(object, name) # 删除对象的成员是否存在
python">class Person:def __init__(self,name,age):self.name = nameself.age = agedef show_info(self):print("你猜猜我是谁?")p = Person("Sakura",10)if hasattr(p,"name"): # 判断对象的成员是否存在name = getattr(p,"name",None) # 获取对象中的成员print(name)if hasattr(p,"age"): # 判断对象的成员是否存在age = getattr(p,"age") # 获取对象中的成员print(age)setattr(p,"age",12) # 设置对象中的属性age = getattr(p,"age") # 获取对象中的成员print(age)delattr(p,"age") # 删除对象中的属性值print(p.__dict__)if hasattr(p,"show_info"):func = getattr(p,"show_info")func()setattr(p,"show_info",lambda : "我是一个无忧无虑的人")func = getattr(p,"show_info")msg = func()print(msg)