类中的反射 装逼利器

功能 可以实现 用一个字符串调用类中对应的实例的方法:

反射:

  hasattr (obj,name_str),判断一个对象obj里是否有字符串name_str的方法

  getattr(obj,name_srt),根据字符串去获取obj对象里的对应方法的内存地址

  setattr(obj,变量字符串,值) 给类的实例对象obj 加一个 变量字符串的属性 值是第三个参数

  delattr(obj,变量字符串)  删除变量字符串对应的obj对象的方法

class Dog(object):


def __init__(self,name):
self.name = name
def eat(self,food):
print("%s在吃"%self.name,food)

d = Dog("keji")
choice = input(">>>:").strip()
#想实现的功能 用字符串调用实例化的方法 eat
#d.choice 直接这么写是不可以的 因为后面的是字符串
#先判断有没有 这个方法
if hasattr(d,choice):# 判断类实例中有没有什么方法? 有返回True
   delattr(d,choice) #判断是否有属性 如果有 删除 就这么用
    func = getattr(d,choice)# 取相应字符串的属性 用字符串映射出了实例的一个方法
func("骨头")

else:
    # setattr(d,choice,bulk) #x.y = V x是字符串 y是方法 V是值
# d.bulk(d) #动态的吧一个类外面的方法装配到了 类里面
setattr(d,choice,22) #动态的设置一个输入的属性
print(getattr(d,choice))#打印动态属性对应的值

这样就实现了用字符串 choice 调用 Dog类的 eat方法

posted on 2018-04-03 19:02  勇往直前的python小白  阅读(122)  评论(0编辑  收藏  举报

导航