• 反射理论


    反射

    根据字符串的形式去某个对象中操作它的成员

    #示例一
    obj = Foo("yang")
    v1 = obj.name #此处name是一个变量
    v1 = getattr(obj,"name") #与上行等价,此处的name是一个字符串
    
    obj.name = "eric"
    setattr(obj,"name","eric") #与上行等价
    
    # 示例二
    class Foo(object):
        
        def login(self):
            pass
        
        def register(self):
            pass
    #岔路1  
    obj = Foo()
    
    obj.login()
    method_name = getattr(obj,"login")#相当于不加括号的上一行
    method_name()#此时与第一行等价
    
    obj.register()
    method_name = getatter(obj,"register")
    method_name()
    #岔路二
    obj = Foo()
    func_name = input("请输入方法名:")
    getattr(obj,func_name)()
    obj.func_name #不可以这样表达,因为此时是去寻找的func_name函数,而不是字符串
    
    • hasttr(对象,字符串),根据字符串的形式去某个对象中判断是否有该成员

    • setattr(对象,"变量","值")根据字符串的形式去某个对象中设置成员

      class Foo:
          pass
      
      obj = Foo()
      obj.k1 = 999
      setattr(obj,"k1",123) #obj.k1 = 123,如果有便重置覆盖了
      print(obj.k1)
      
    • delattr(对象,"变量")根据字符串的形式去某个对象中删除成员

      class Foo:
          pass
      
      obj = Foo()
      obj.k1 = 999
      delattr(obj,"k1") #obj.k1 = 123,如果有便重置覆盖了
      print(obj.k1)
      

      python中一切皆对象,所以以后想要通过字符串的形式操作其内部成员都可以通过反射机制实现

      • Py文件

      • 对象

        # 测试文件
        #1.
        x1 = [11,22,33]
        #2.
        def func():
            print("func")
        #3.
        class Foo(object):
            X = 1
            def show(self):
                print("Foo.show")
            @staticmethod
            def info():
                print("info")
                
                
                
        # 反射文件
        import 测试
        # print(测试.x1)
        #1
        v1 = getattr(测试,"x1")
        print(v1)
        #2
        v2 = getattr(测试,"func")()
        
        #3.
        v3 = getattr(测试,"Foo")
        print(v3) #输出的是一个类
        
        v4 = getattr(v3,"X")
        
        v5 = getattr(v3,"info")
        v5()
        
        obj = v3()
        m = getattr(obj,"show")
        m()
        
        

    胜多负少大V# 反射

    根据字符串的形式去某个对象中操作它的成员

    #示例一
    obj = Foo("yang")
    v1 = obj.name #此处name是一个变量
    v1 = getattr(obj,"name") #与上行等价,此处的name是一个字符串
    
    obj.name = "eric"
    setattr(obj,"name","eric") #与上行等价
    
    # 示例二
    class Foo(object):
        
        def login(self):
            pass
        
        def register(self):
            pass
    #岔路1  
    obj = Foo()
    
    obj.login()
    method_name = getattr(obj,"login")#相当于不加括号的上一行
    method_name()#此时与第一行等价
    
    obj.register()
    method_name = getatter(obj,"register")
    method_name()
    #岔路二
    obj = Foo()
    func_name = input("请输入方法名:")
    getattr(obj,func_name)()
    obj.func_name #不可以这样表达,因为此时是去寻找的func_name函数,而不是字符串
    
    • hasttr(对象,字符串),根据字符串的形式去某个对象中判断是否有该成员

    • setattr(对象,"变量","值")根据字符串的形式去某个对象中设置成员

      class Foo:
          pass
      
      obj = Foo()
      obj.k1 = 999
      setattr(obj,"k1",123) #obj.k1 = 123,如果有便重置覆盖了
      print(obj.k1)
      
    • delattr(对象,"变量")根据字符串的形式去某个对象中删除成员

      class Foo:
          pass
      
      obj = Foo()
      obj.k1 = 999
      delattr(obj,"k1") #obj.k1 = 123,如果有便重置覆盖了
      print(obj.k1)
      

      python中一切皆对象,所以以后想要通过字符串的形式操作其内部成员都可以通过反射机制实现

      • Py文件

      • 对象

        # 测试文件
        #1.
        x1 = [11,22,33]
        #2.
        def func():
            print("func")
        #3.
        class Foo(object):
            X = 1
            def show(self):
                print("Foo.show")
            @staticmethod
            def info():
                print("info")
                
                
                
        # 反射文件
        import 测试
        # print(测试.x1)
        #1
        v1 = getattr(测试,"x1")
        print(v1)
        #2
        v2 = getattr(测试,"func")()
        
        #3.
        v3 = getattr(测试,"Foo")
        print(v3) #输出的是一个类
        
        v4 = getattr(v3,"X")
        
        v5 = getattr(v3,"info")
        v5()
        
        obj = v3()
        m = getattr(obj,"show")
        m()
        
        
  • 相关阅读:
    fastclick插件 导致 input[type="date"] 无法触发问题解决方案
    mysql,命令导入导出表结构或数据
    python使用requests库请求网址时,发生requests.exceptions.SSLError 错误解决办法
    Python使用random.shuffle()随机打乱字典排序
    Zend Studio 配置SVN并导入SVN项目
    ZendStudio调试配置(XDebug)
    PHP会话机制---session的基本使用
    PHP统计当前网站的访问人数,访问信息,被多少次访问。
    题解【luoguP1351 NOIp提高组2014 联合权值】
    题解【luogu P2421 bzoj P1407 [NOI2002]荒岛野人】
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/14136030.html
Copyright © 2020-2023  润新知