反射定义:通过字符串映射或者修改程序运行时的状态,属性,方法。
方法有如下4个:
1:getattr(object,name,default=None):根据字符串去获取obj对象里的对应的方法的内存地址,如果是属性则会直接返回值。
2:hasattr(object,name):判断对象object里是否存在name字符串的方法映射
3:setattr(x,y,v) ==》 x.y = v :通过字符串设置新的属性(可以重设普通属性值,也可以将函数设置为类方法)
4:delattr(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 eat %s' % (self.name,food)) obj = Dog('沙皮')
mess = input('请输入操作的方法:')
if hasattr(obj,mess):
#-----删除---
#delattr(obj,mess) # 模拟传入name,删除name属性
#print(obj.name) # 报错提示没有name属性
#-----以字符串打印方法值---
# fun = getattr(obj,mess) # 这里将通过getattr得到talk方法的内存地址
# fun('baba')
#-----重置属性值---
# setattr(obj,mess,'22') # 这里可以重新修改已存在的属性值
# print(getattr(obj,mess))
else: #------设置将类外面的函数引入类中----
# setattr(obj,mess,bulk) # 动态将bulk函数装入类中
# getattr(obj,mess)(obj) # 动态使用getattr方法获取输入值,然后将obj对象本身当参数传入,因为上面的bulk函数有self参数。 # -----设置动态传入属性
setattr(obj,mess,22) # 设置默认属性值,
print(getattr(obj,mess)) # 返回默认属性值22
# 可以重新设置已存在的属性值

最新文章

  1. QT读取文本(字符串)最后一行的方法
  2. 使用ajax技术实现txt弹出在页面上
  3. MySQL导出数据
  4. 【shell】条件判断式
  5. Golang http包下FileServer的使用
  6. Debian6单用户模式
  7. Fire Again CodeForces - 35C (BFS)
  8. Prometheus-配置解析
  9. Variables多种表达
  10. ElasticSearch权威指南学习(文档)
  11. 使用jquery方法的时候,要注意对象是哪个,否则很容易出错
  12. [题目] Luogu P1312 Mayan游戏
  13. e617. Determining the Opposite Component of a Focus Event
  14. JSP九大内置对象与Servlet学习笔记[转]
  15. Python:字符串处理函数
  16. js javascript 实现多线程
  17. Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead)
  18. docker-It's possible that too few managers are online. Make sure more than half of the managers are online.
  19. 面试中关于Java虚拟机(jvm)的问题看这篇就够了
  20. 技巧:Vimdiff 使用(改)

热门文章

  1. Visual studio每次build自动增加版本号
  2. JDBC的fetchsize和maxrows
  3. DROP USER - 删除一个数据库用户帐号
  4. && (and)、||(or) 条件语句
  5. 从postgres数据库逆向生成hibernate实体类
  6. 1.ssm web项目中的遇到的坑--自定义JQuery插件(slide menu)
  7. 项目中常用的js方法(持续更新)
  8. vscode 中文设置
  9. c++类的单目和双目运算符的重定义
  10. tornado框架基础01-路由简介