反射就是经过字符串的形式,导入模块;经过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操做(查找/获取/删除/添加)成员,一种基于字符串的事件驱动。ide
# -*-coding:utf-8 -*- # 反射在其余语言中执行效率比较低,在Python中执行效率高 class foo: def __init__(self,name,age): self.name=name self.age=age def show(self): return "%s-%s"%(self.name,self.age) obj=foo("jiaxin",18) print(obj.name) b="name" #obj.b # AttributeError: 'foo' object has no attribute 'b'
getattr,hasattr,setattr,delattr四个函数函数
print(obj.__dict__[b]) #getattr #setattr #hasattr #delattr #去什么东西里面获取什么属性 v=getattr(obj,"name") print(v) # jiaxin func=getattr(obj,"show") print(func) # <bound method foo.show of <__main__.foo object at 0x000000BA7888AB38>> print(func()) # jiaxin-18 print(hasattr(obj,"name")) # True 用于判断是否有name成员 setattr(obj,"m1","n1") print(obj.m1) #这个m1是存在对象中的 # n1 delattr(obj,"m1")