一、反射机制:程序动态分析的能力
反射机制指在运行时检查、访问和修改对象的属性和方法,而不需要提前知道这些属性和方法
不知到对象具体时什么的情况下,让程序能动态分析出对象里面有什么
不知使用者调用对象里面什么方法,调用方法里面可能有,可能没有,
让程序动态分析出来到底有没有,有就调用,没有就跳过
函数 | 功能 | 返回结果 |
hasattr(object, attribute) | 检查对象是否具有指定的属性 | 存在属性返回True,不存在属性返回False |
getattr(object, attribute, default) | 获取对象的指定属性的值 | 存在属性返回属性值,不存在属性返回默认值(可选参数) |
setattr(object, attribute, value) | 给对象的指定属性设置值 | 无返回值 |
delattr(object, attribute) | 删除对象的指定属性 | 无返回值 |
二、简单例子
class Person:
def __init__(self, username, age):
self.username = username
self.age = age
person = Person('zhangsan', 17)
- 检查对象是否具有指定属性
if hasattr(person, "username"):
print("person对象具有username属性")
else:
print("person对象没有username属性")
- 获取对象的指定属性的值
name_value = getattr(person, "username")
print(name_value) # 输出: Alice
- 给对象的指定属性设置值:
setattr(person, "username", "Bob")
print(person.name) # 输出: Bob
- 删除对象的指定属性:
delattr(person, "username")
if hasattr(person, "username"):
print("person对象仍然具有username属性")
else:
print("person对象没有username属性了")