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)

 

转载于:https://www.cnblogs.com/ceceliahappycoding/p/8421511.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值