hasattr getattr setattr delattr --> (反射)

class Room:
    def __init__(self,name):
        self.name = name

    def big_room(self):
        print('bigroot')

R = Room('回电话')

#hasattr 有没某个属性,存在返回True 不存在返回Fales
print(hasattr(R,'name'))      #R实例里面 有没有name属性  结果是:True
print(hasattr(R,'big_room'))  #R实例里面 有没有big_room属性  结果是:True


#getattr 获取某个实例里面属性的值,获取不到默认参数会给出报错
'''getattr(object, name[, default]) -> value'''
print(getattr(R,'name'))    #R实例里面 获取name属性值  结果是:回电话
print(getattr(R,'big_room')) #R实例里面 big_room  结果是:函数属性的内存地址
print(getattr(R,'big_room111','不存在')) #R实例里面 big_room  结果是:获取不到,返回不存在

#setattr 设置某个实例的属性值
setattr(R,'test','123')   #R实例里面,设置test=123的值 与R.test=123 是一回事
print(R.__dict__)   #{'name': '回电话', 'test': '123'}
setattr(R,'name','123')   #修改R实例里面name值
print(R.__dict__)   #{'name': '123', 'test': '123'}
setattr(R,'func',lambda x:x+1)  #增加一个函数属性

#delattr删除某个实例的属性
delattr(R,'name')   #删除R实例里面 name 属性   与del R.name  是一回事
print(R.__dict__)   #{'test': '123'}

 

原文地址:https://www.cnblogs.com/ajaxa/p/9051607.html