zoukankan      html  css  js  c++  java
  • 类中的反射 装逼利器

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

    反射:

      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方法
  • 相关阅读:
    【ZJOI2007】棋盘制作 BZOJ1057
    【ZJOI2008】 树的统计 count
    【JSOI2007】麻将 bzoj 1028
    【省选】省选黄色预警
    【ZJOI2013】k大数查询 BZOJ 3110
    【HNOI2008】Cards BZOJ 1004
    【JSOI2010】Group 部落划分 BZOJ 1821
    NOIp2014 解题报告
    CH Round #56
    CH Round #55
  • 原文地址:https://www.cnblogs.com/daluozi/p/8710433.html
Copyright © 2011-2022 走看看