Python教程: 反射及常用的几种方法

打印 上一主题 下一主题

主题 845|帖子 845|积分 2535

反射就是通过字符串映射或修改程序运行时的状态、属性、方法
有四个常用方法:

  • hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法
  • getattr(obj,name_str) 根据字符串name_str获取Obj对象中对应方法的内存地址
  • setattr(obj,key,value) 为对象Obj新增或修改属性或者方法
  • delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法
反射Demo举例:
  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. '''
  4. hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法
  5. getattr(obj,name_str) 根据字符串name_str获取Obj对象中对应方法的内存地址
  6. setattr(obj,key,value) 为对象Obj新增或修改属性或者方法
  7. delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法
  8. '''
  9. def bulk(self):
  10.     print("%s is yelling"%self.name)
  11. class Dog(object):
  12.     def __init__(self,name):
  13.         self.name=name
  14.     def eat(self,food):
  15.         print("%s is eating %s"%(self.name,food))
  16. jim=Dog("Jim")
  17. choise=input(">>输入需要执行的操作:").strip()
  18. if hasattr(jim,choise):
  19.     func=getattr(jim,choise)
  20.     func("巧克力")
  21.     #delattr(jim,choise)
  22. else:
  23.         #Python学习交流群:153708845
  24.     #动态装配一个方法 choise为方法名,bulk为方法的内存地址
  25.     setattr(jim,choise,bulk)
  26.     # 调用时用转配的方法名,即传入的choise值,这里需要传入对象本身
  27.     getattr(jim,choise)(jim)
  28.     #动态装配一个属性,也可以修改属性
  29.     setattr(jim,choise,"新装配的属性")
  30.     print(getattr(jim,choise))
  31. #print(jim.name)
  32. #jim.eat("狗粮")
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表