一、简述:反射是指在程序运行的过程中可以动态地获取对象的信息。

二、作用:实现了语言的动态性。

三、如何实现反射

  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'

 

posted on 2020-02-02 08:01  焚音留香  阅读(95)  评论(0编辑  收藏  举报