python反射
反射:用户输入字符串,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)
以上是 python反射 的全部内容, 来源链接: utcz.com/z/388615.html