反射/自省:程序可以访问,检测和修改本身状态或行为的一种能力。
python中提供四种函数:
hasattr(obj,name) 判断obj中有没有一个name字符串对应的方法或者属性
getattr(obj,name(,default))等到obj中name的值
setattr(obj,name,value)设置obj中name的值时value
delattr(obj,name) 删除obj中的name值
class BlackMedium: feture='ugly' def __init__(self,name1,addr): self.name=name1 self.addr=addr def sell_hourse(self): print('%s正在卖房'%self.name) def rent_hourse(self): print('%s租房子'%self.name) b1=BlackMedium('zyk','sh') r=hasattr(b1,'name') print(r) s=hasattr(b1,'sell_hourse') #在查询b1能不能调用class BlackMedium中的属性 print(s) w1=getattr(b1,'name') #同b1.name w2=getattr(b1,'rent_hourse')#没有默认参数,如果没有就会报错 w3=getattr(b1,'abc','没有这个属性')#如果没有,就反馈默认参数 print(w1,w2,w3)#w2是函数地址 w2() b1.sb=True#上下两个方法都能用,设置与修改的功能 setattr(b1,'sb2',False) print(b1.__dict__) del b1.sb delattr(b1,'sb2')#删除 print(b1.__dict__)
》》》
True
True
zyk <bound method BlackMedium.rent_hourse of <__main__.BlackMedium object at 0x102097dd8>> 没有这个属性
zyk租房子
{'name': 'zyk', 'addr': 'sh', 'sb': True, 'sb2': False}
{'name': 'zyk', 'addr': 'sh'}