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方法
  • 相关阅读:
    .ds_store是什么文件
    style="background-image: url(__HOMEPAGE__/views/IMJ2V2/images/banner2.jpg)"
    前段实现图片懒加载
    thinkphp路由的作用
    thinkphp跨模块调用
    关于肥胖和美国为什么那么多胖子
    php中局部变量和全局变量
    thinkphp5项目--企业单车网站(七)
    thinkphp5项目--企业单车网站(六)
    XSS攻击及防御
  • 原文地址:https://www.cnblogs.com/daluozi/p/8710433.html
Copyright © 2011-2022 走看看