2019年8月9日 反射

反射/自省:程序可以访问,检测和修改本身状态或行为的一种能力。

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'}

猜你喜欢

转载自www.cnblogs.com/python1988/p/11329326.html