码迷,mamicode.com
首页 > 其他好文 > 详细

day07-02-反射

时间:2017-10-31 22:20:34      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:ast   mod   mos   删除   sel   col   elf   功能   内置函数   

反射:通过字符串映射或修改程序运行时的状态、属性、方法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-反射

标签:ast   mod   mos   删除   sel   col   elf   功能   内置函数   

原文地址:http://www.cnblogs.com/zlz-leidaxia/p/7763962.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!