反射

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

 1 # hasattr(obj, name_str), 判断一个对象obj里是否有对应的name_str字符串的方法
 2 # getattr(obj, name_str), 根据字符串去获取obj对象里的对应的方法的内存地址
 3 # setattr(obj,'y',z),      is equivalent to ``x.y = v''  通过字符串设置新的属性
 4 # delattr(obj, name_str)   删除
 5 
 6 def bulk(self):
 7     print("%s在大叫...." %self.name)
 8 
 9 class Dog(object):
10     def __init__(self,name):
11         self.name = name
12     def eat(self,food):
13         print("%s在吃%s"%(self.name,food))
14     def sleep(self):
15         print("%s 在睡觉"%self.name)
16 
17 d = Dog("金毛")
18 choice = input(">>:").strip()
19 if hasattr(d,choice) :      #输入方法名 eat或sleep 返回True
20     # print(getattr(d,choice))     #<bound method Dog.eat of <__main__.Dog object at 0x02509850>> 调用方法 得到内存地址
21     getattr(d,choice)("狗粮")     #gou is eating... 狗粮
22     # delattr(d,choice)          #删除
23 else:
24     setattr(d,choice,bulk)      #d.talk = bulk  #这里的talk为输入的talk 讲bulk方法添加到类里
25     func = getattr(d, choice)
26     func(d)

 

 posted on 2018-08-08 23:26  二十二a  阅读(81)  评论(0)    收藏  举报