通过字符串映射或修改程序运行时的状态、属性、方法。有如下四个方法

1.hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法

2.getattr(obj,name_str), 根据name_str字符串去获取obj对象里的对应的方法的内存地址

3.setattr(obj,'y',z), is equivalent to ``x.y = v''    obj是一个对象   y是一个对象中需要的属性  v 是y的值

4.delattr   is equivalent to ``del x.y''

实例代码如下:

'''
反射
hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法
getattr(obj,name_str), 根据name_str字符串去获取obj对象里的对应的方法的内存地址
setattr(obj,'y',z), is equivalent to ``x.y = v''
delattr is equivalent to ``del x.y''
'''
def bulk(self):
print("%s is yelling...." %self.name) class Dog(object):
def __init__(self,name):
self.name = name def eat(self,food):
print("%s is eating..."%self.name,food) d = Dog("TD")
choice = input(">>:").strip() if hasattr(d, choice):
haveFunc = getattr(d, choice)
haveFunc("food")
else:
setattr(d, choice, bulk) #若从控制台输入的字符串为talk此时此处等价于d.talk = bulk
Add_func = getattr(d, choice)
Add_func(d)

结论:反射是通过字符串的形式操作对象相关的成员。一切事物都是对象!!!

												

最新文章

  1. 字符编码笔记:ASCII,Unicode和UTF-8 转
  2. position:fixed失效
  3. SeaJS与RequireJS最大的区别
  4. mongodb远程连接以及备份、还原、导出、导入
  5. linux常用头文件及说明
  6. 课堂里学不到的C与C++那些事(一)
  7. CSS3秘笈:第二章
  8. ubuntu14下python环境的配置
  9. libsvm参数选择
  10. oracle 数据库管理--管理表空间和数据文件
  11. .net 系列:并发编程之一 并发编程的初步理论
  12. PAT 1003. Emergency (25) dij+增加点权数组和最短路径个数数组
  13. 关于spring mybateis 定义resultType="java.util.HashMap"
  14. 【iOS】Swift LAZY 修饰符和 LAZY 方法
  15. linux下64位汇编的系统调用(3)
  16. 一条sql执行过长的时间,你如何优化,从哪些方面?
  17. nginx进行反向代理,80端口使用
  18. C++向量 vector动态数组
  19. ID过滤靓号写法(PHP和Nodejs版本)
  20. 5.4 C++重载输入与输出操作符

热门文章

  1. asp.net 输入框在chrome中无法关闭自动提示
  2. 用with来打开文本文件
  3. 在exsi6.0中安装debian8.1 64位 无界面服务器版.
  4. 20179223《Linux内核原理与分析》第二周学习笔记
  5. 实用符号Alt+小键盘快输
  6. 看到就是赚到!Selenium完整框架——告别2017
  7. javascript异常处理。 屏蔽异常
  8. C++ static 用法
  9. 看了redis想一下
  10. caddy server 了解