反射:通过字符串映射或修改程序运行时的状态,属性,方法。
4个函数:getattr(),hasattr(),setattr(),delattr()
用法如下:
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"%self.name,food) d=Dog("Sun") choice=input(">>:").strip() #choice为字符串形式 #print(hasattr(d,choice)) #hasattr(obj,name_str)判断一个对象obj里是否有name_str方法 if hasattr(d,choice): delattr(d,choice) #delattr(obj,name_str) 删除obj对象中的name_str属性 func = getattr(d,choice) #getattr(obj,name_str)获取对象obj里name_str方法的内存地址(如果有) #print(func) setattr(d,choice,"Xiao") #改名 #func("HEHE") #func就相当于eat else: # setattr(d,choice,bulk) #setattr(obj,name_str1,name_str2)把位于obj对象外的name_str2方法加进obj对象中(动态装一个方法) obj.name_str1=name_str2 # d.talk(d) #talk即name_str1 # print(d.name) # setattr(d,choice,None) #动态装一个静态属性 d.choice=None # print(getattr(d,choice)) setattr(d,choice,150000) print(getattr(d,choice)) #getattr(d,choice)如果是一个方法,则返回内存地址;如果是一个不存在的静态属性,则直接返回值) print(d.name) #改名测试 d.eat("Monkey")