本文实例讲述了Python面向对象之反射/自省机制。分享给大家供大家参考,具体如下:
反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省)
下面就介绍四种实现自省的函数,适用于类和对象
1. 判断object中有没有一个name字符串对应的属性或者方法
hasattr(object,name)
2. 获取object中name字符串对应的属性值或者方法地址,其中default参数的作用是,在找不到属性的时候,给予调用者的提示信息。
getattr(object,name,default= None)
3. 将object中name字符串对应的属性值设置为value,这个属性可以是新增的属性。
setattr(object,name,value)
4. 删除object中name字符串对应的属性。
delattr(object,name)
四个方法的演示
class BlackMedium: feture = 'Ugly' def __init__(self,name,addr): self.name = name self.addr = addr def sell_house(self): print('%s卖房子'%(self.name)) def rent_house(self): print('%s租房子'%(self.name)) b1 = BlackMedium('万成置地','天露园') #检测是否含有某个属性 print(hasattr(b1,'name')) print(hasattr(b1,'sell_house')) #获取属性 temp = getattr(b1,'name') print(temp) func = getattr(b1,'rent_house') func() #getattr(b1,'aaaaaa') 获取不存在的属性,就会报错。 print(getattr(b1,'aaaaa','该属性不存在')) #设置数据属性和方法属性 setattr(b1,'sb',True) setattr(b1,'show_name',lambda self:self.name + 'sb') print(b1.__dict__) print(b1.show_name(b1)) #删除属性 delattr(b1,'addr') delattr(b1,'show_name') #删除不存在的属性,报错 delattr(b1,'show_name123') print(b1.__dict__)
运行结果:
True
True
万成置地
万成置地租房子
该属性不存在
{'sb': True, 'show_name': <function <lambda> at 0x01BCA7F0>, 'name': '\xe4\xb8\x87\xe6\x88\x90\xe7\xbd\xae\xe5\x9c\xb0', 'addr': '\xe5\xa4\xa9\xe9\x9c\xb2\xe5\x9b\xad'}
万成置地sb
Traceback (most recent call last):
File "C:\py\jb51PyDemo\src\Demo\test.py", line 37, in <module>
delattr(b1,'show_name123')
AttributeError: BlackMedium instance has no attribute 'show_name123'
为什么用反射呢?
举例:两个程序员A,B,A在写程序用到B写的类,但是B还没有完成这个类的编写。此时就可以用到反射,完成A自己想要编写的代码。并且不影响B的后期编码。
好处:可以事先定义好接口,接口只有在被完成时,才会真正执行,实现了即插即用,也就是一种后期绑定,即先定义接口,后期在实现接口的功能。
B还没有实现的全部功能
class FtpClient: #ftp客户端,但是还没有实现功能 def __init__(self,addr): print('正在连接服务器[%s]'%(self.addr)) self.addr = addr
A后期的代码编写
from module import FtpClient f1 = FtpClient('198.1.1.1') #在编写某个方法前,先判断该方法是否存在,存在就可以直接调用,不存在就要编写。 if hasattr(f1,'get'): func_get = getattr(f1,'get') func_get() else print('-----》不存在这个方法') print('处理其他的逻辑')
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]