Python内置函数-反射相关

发布于 2020-05-16  582 次阅读


通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射),下列方法适用于类和对象(一切皆对象,类本身也是一个对象)

  • hasattr 根据字符串的形式去判断对象中是否含有成员
  • getattr 根据字符串的形式去对象中找成员
  • setattr 根据字符串的形式去动态设置对象成员
  • delattr 根据字符串的形式去删除对象成员
class A:
    f = '类的静态变量'

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say(self):
        print('hi,{}'.format(self.name))


obj = A('zhangsan', 35)

# 检查是否含有某属性
print(hasattr(obj, 'name'))
print(hasattr(obj, 'say'))

# 获取某属性
print(getattr(obj, 'name'))
print(getattr(obj, 'f'))
a = getattr(obj, 'say')
a()

print(getattr(obj,'address','beijing')) # address不存在,如果没有设置默认值则报错

# 设置属性
setattr(obj, 'nickname', '法外狂徒')
setattr(obj, 'show_name', lambda self:self.name + self.nickname)
print(obj.__dict__)
print(obj.show_name(obj))

# 删除属性
delattr(obj, 'age')
delattr(obj, 'show_name')
delattr(obj, 'sex') # 不存在 报错
print(obj.__dict__)

一名测试工作者,专注接口测试、自动化测试、性能测试、Python技术。