Python 反射

 
反射的使用

 

 

 

反射(一)

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

getattr(obj,name_str):根据字符串获取obj对象里的对应的方法的内存地址。

setattr(obj,'y',v): 给对象添加新的属性。"x.y = v" :obj是对象,y字符串,v方法,属性。

delattr(obj,y):删除对象下的变量,可以以字符串形式删除。

 

例子

#hasattr判断choice是否是d对象可调用的方法
#hasattr(d,choice)

#getattr可同过choice变量传入的字符串,传给d的内存地址
#getattr(d,choice)

#getattr 加括号调用内存地址
#getattr(d,choice)()

#删除d对象下的字符串赋值的变量。
#delattr(d,choice)

#可执行方法属性,动态的将字符串bulk方法赋值给choice
#setattr(d,choice,bulk)
#d.choice(d)

 

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 eating %s"%(self.name,food))

d = Dog("NiuHanYang")
choice = input(">>:").strip()

#结合使用
if hasattr(d,choice): #判断是可执行方法。
   func = getattr(d,choice) #可能要传入参数,先传入值。
   func("chenRonghua")
else:
     #setattr(对象,字符串,方法属性)
     setattr(d,choice,bulk)
     d.talk(d)

     #可将字符串转为22属性,赋值给字符串choice。
     setattr(d,choice,22)
     print(getattr(d,choice))

 

反射(二)

反射的灵活应用

#setattr赋值方法,进行转换,getattr进行执行字符串。
setattr(d,choice,bulk) #d.talk = bulk内存地址
func = getattr(d,choice)
func(d)

 

posted @ 2017-11-14 11:54  kevin.Xiang  阅读(284)  评论(0编辑  收藏  举报