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)