反射就是經過字符串的形式,導入模塊;經過字符串的形式,去模塊尋找指定函數,並執行。利用字符串的形式去對象(模塊)中操做(查找/獲取/刪除/添加)成員,一種基於字符串的事件驅動。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")