反射
来源:互联网 发布:剑灵人男捏脸数据截图 编辑:程序博客网 时间:2024/06/07 09:05
点方法访问属性的本质:
obj.attr >>> obj.__dict__[‘attr’]
本质是到对象的名称空间,通过属性的字符串名字来找。
通过字符串操作属性,就是反射。
python提供了通过字符串操作对象属性的方法(tips: python中一切皆对象):
1. hasattr(obj, ‘attr’) 判断属性,返回True/False
2. getattr(obj, ‘attr’, ‘xxx’) 获取属性,获取失败则返回’xxx’信息。如果未指定第三个参数,获取失败就报错。
3. setattr(obj, ‘attr’) 设置属性
4. delattr(obj, ‘attr’) 删除属性
用户的输入是字符串类型,因此反射适合用户交互的场景:
class Cmd(): def ls(self): print('ls function') def cat(self): print('cat function') def pwd(self): print('pwd function') def run(self): while True: cmd = input('>>> ') if not cmd:continue if hasattr(self,cmd): # 判断用户输入的属性是否存在 getattr(self,cmd)() # 获取属性并执行 else: print('invalid cmd')c = Cmd()c.run()
阅读全文
1 0
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- sublime 多处同时操作和替换
- highcharts(1)------- 通过 Ajax 加载数据
- android获取文本编码
- VMware Workstation 11 中 Ubuntu 14.04 的 VMware Tools 问题 : 共享文件夹
- 为toolbar菜单栏添加图标
- 反射
- 解决MySql 数据库 提示:1045 access denied for user 'root'@'localhost' using password yes
- 软件架构设计原则和大数据平台架构层
- Android 7.0调用系统相机返回路径问题
- C#相关的网站、资源和书籍
- AIX:struct dirent d_type
- 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较
- 121. Best Time to Buy and Sell Stock
- 西风多少恨,吹不散眉弯