本篇文章讨论Python中非常有趣且强大的概念——反射(Reflection)。想象一下,你正在编写一段代码,并希望这段代码能够具备自我认知和动态调整的能力。就好比一面镜子,能反映出它自身的属性和行为。在编程领域,这种“自我观察”和“动态操控”的能力就是我们所说的反射。
目录
一、概念
在Python中,反射是指程序能够在运行时获取并操作自身内部信息,包括但不限于类、对象、属性和方法等。这意味着我们可以根据字符串动态地访问和修改这些元素,而不必在编译时就明确知道所有的细节。
说得通俗一点就是通过指定的字符串(即关键字),从而获取已存在的对象中的方法或属性。找到方法后自动执行——基于字符串的事件驱动;反射在自动化测试中有非常广泛的应用,是关键字驱动框架的基础。
二、具体表现
1、类型信息获取:
type(obj):返回对象obj的类型。
isinstance(obj, classinfo):判断对象obj是否是类或类型classinfo的实例。
2、动态属性操作:
- getattr(obj, attr_name, default) : 通过字符串
attr_name
从对象obj
中获取属性或方法。如果该属性不存在且提供了默认值,则返回默认值;否则如果没有提供默认值且属性不存在,将抛出AttributeError
异常。- hasattr(obj, attr_name) :检查对象obj是否有名为attr_name的属性或方法。
- setattr(obj, attr_name, value) :为对象obj设置名为attr_name的属性或方法,将其值设为value。
- delattr(obj, attr_nam