day07-02-反射

Posted 雷大侠!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day07-02-反射相关的知识,希望对你有一定的参考价值。

反射:通过字符串映射或修改程序运行时的状态、属性、方法python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员、获取成员、设置成员、删除成员。

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

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

setattr(obj,name_str,bulk) 其中obj.name_str=bulk,下面若输入talk字符串,则d.talk = bulk,下面对象调用d.talk即可调用函数bulk进入类内部

d.talk(d)

# 删除输入的属性

delattr(obj,name_str)

  1. def bulk(self):
  2. print("%s is yelling...." %self.name)
  3. class Dog(object):
  4. def __init__(self,name):
  5. self.name = name
  6. def eat(self,food):
  7. print("%s is eating..."%self.name,food)
  8. d = Dog("zlz")
  9. choice = input(">>:").strip()
  10. # 判断有没有
  11. if hasattr(d,choice):
  12. # 删除输入的属性
  13. delattr(d,choice)
  14. # 调用,映射除了调用方法的内存地址
  15. getattr(d,choice)
  16. else:
  17. setattr(d,choice,bulk) #若输入talk字符串,则d.talk = bulk,下面对象调用d.talk即可调用函数bulk进入类内部
  18. d.talk(d)
  19. func = getattr(d, choice)
  20. func(d)
  21. print(d.name)
  22. # 输出
  23. # >>:talk
  24. # zlz is yelling....
  25. # zlz is yelling....
  26. #错误
  27. # >>:name
  28. # Traceback (most recent call last):
  29. # File "E:/Python/第07周-Python3.5-零基础-高级-完整项目剖析-共14章节/源码/反射.py", line 21, in <module>
  30. # getattr(d,choice)
  31. # AttributeError: ‘Dog‘ object has no attribute ‘name‘

以上是关于day07-02-反射的主要内容,如果未能解决你的问题,请参考以下文章

反射机制入门

反射机制入门

java 反射代码片段

Day4 python反射

Day17-注解与反射

DAY21 反射(hasattr,getattr,setattr,delattr)