一、反射机制:程序动态分析的能力

反射机制指在运行时检查、访问和修改对象的属性和方法,而不需要提前知道这些属性和方法

不知到对象具体时什么的情况下,让程序能动态分析出对象里面有什么
不知使用者调用对象里面什么方法,调用方法里面可能有,可能没有,
让程序动态分析出来到底有没有,有就调用,没有就跳过

函数

功能

返回结果

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属性了")