反射:用户输入字符串,hasattr:到内存中找是否存在字符串对应的属性名或方法名、getattr获取、setattr增加、delattr删除对应属性、方法
1 class Dog(object): 2 def __init__(self,name): 3 self.name=name 4 def eat(self,food): 5 print('%s is eating %s'%(self.name,food)) 6 7 def bulk(self): 8 print('%s is yelling'%self.name) 9 10 dog1=Dog('lele') 11 choice=input('>>:').strip() 12 if hasattr(dog1,choice): #判断对象是否具有对应字符串的方法 13 func=getattr(dog1,choice) #根据字符串,获取对象对应方法的内存地址 14 func('gutou')
>>:eat
lele is eating gutou
if hasattr(dog1,choice): #判断对象是否具有对应字符串的方法、属性 func=getattr(dog1,choice) #根据字符串,获取对象对应方法、属性的内存地址 func('gutou') else: # 添加方法 setattr(dog1,choice,bulk) #给对象增加一个方法,setattr(x,'y',v)==> x.'y'=v func=getattr(dog1,choice) func(dog1) #相当于静态方法,所以要把对象作为参数传进去
>>:talk
lele is yelling
if hasattr(dog1,choice): func=getattr(dog1,choice) func('gutou') else: #添加属性 setattr(dog1,choice,13) v=getattr(dog1,choice) print(v)
>>:age
13
if hasattr(dog1,choice): #判断对象是否具有对应字符串的方法或属性 delattr(dog1,choice) #删除对象的属性 print(dog1.name)