标签:sel self ict 租房 状态 div event alt fun
反射的盖面是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省),
这一概念的提出很快引发了计算机科学领域关于应用反射的研究。它首次被程序语言的设计领域所采用。并在Lisp和面向
对象方面取得了成绩。
class BlackMedium: feture=‘Ugly‘ def __init__(self,name,addr): self.name=name self.addr=addr def sell_hourse(self): print(‘[%s]正在卖房子,傻逼才买呢‘%self.name) def rent_hourse(self): print(‘[%s]正在租房子,傻逼才买呢‘%self.name) b1=BlackMedium(‘黑中介‘,‘殡仪馆‘)
判断object中有没有一个name字符串对应的方法或属性
class BlackMedium: feture=‘Ugly‘ def __init__(self,name,addr): self.name=name self.addr=addr def sell_hourse(self): print(‘[%s]正在卖房子,傻逼才买呢‘%self.name) def rent_hourse(self): print(‘[%s]正在租房子,傻逼才买呢‘%self.name) b1=BlackMedium(‘黑中介‘,‘殡仪馆‘) print(b1.__dict__)#{‘name‘: ‘黑中介‘, ‘addr‘: ‘殡仪馆‘} # b1.name------->b1.__dict__[‘name] print(b1.name)#黑中介 print(b1.addr)#殡仪馆 #用hasattr检测类的属性和方法,存在返回TRUE,不存在返回FALSE print(hasattr(b1,‘name‘))#True print(hasattr(b1,‘addr‘))#True print(hasattr(b1,‘namnmae‘))#False
检测正确时,有属性就返回属性值,有方法就返回方法的内存地址,加()就可以运行
检测有错误时,不给default赋值会报错,报错时写什么会提示什么
#检测属性,属性存在就会打印值,属性不存在会打印报错或default print(getattr(b1,‘name‘))#黑中介 print(getattr(b1,‘aaaaaa‘))#有报错提示 print(getattr(b1,‘aaaaaa‘,‘没有此属性‘))#有报错提示:没有此属性 #检测方法,有则返回内存地址,加()就可以运行,没有则报错或提示default信息 print(getattr(b1,‘sell_hourse‘,‘无此方法‘))#返回sell_hourse方法的内存地址,-------》b1.sell_hourse #<bound method BlackMedium.sell_hourse of <__main__.BlackMedium object at 0x0000020EE5447198>> #有内存地址加()就可以运行 func=getattr(b1,‘sell_hourse‘) func()#[黑中介]正在卖房子,傻逼才买呢 print(getattr(b1,‘jskdkflsd‘,‘无此方法‘))#无此方法
可以增加修改属性,也可以增加方法,
x传入对象,y传入字符串相当于字典中的key,x传入值相当于字典中的value
print(b1.__dict__)#{‘name‘: ‘黑中介‘, ‘addr‘: ‘殡仪馆‘} setattr(b1,‘name‘,‘SB‘)#修改属性 setattr(b1,‘sb‘,True)#增加属性 print(b1.__dict__)#{‘name‘: ‘SB‘, ‘addr‘: ‘殡仪馆‘, ‘sb‘: True} setattr(b1,‘func‘,lambda self:self.name+‘SB‘)#增加函数属性 # print(b1.func(b1))#黑中介SB
删除属性x,y同上
print(b1.__dict__)#{‘name‘: ‘黑中介‘, ‘addr‘: ‘殡仪馆‘} delattr(b1,‘name‘)#删除属性------》del b1.name # del b1.name print(b1.__dict__)#{‘addr‘: ‘殡仪馆‘}
标签:sel self ict 租房 状态 div event alt fun
原文地址:https://www.cnblogs.com/happyfei/p/9618996.html