zoukankan      html  css  js  c++  java
  • 反射理论

    反射

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

    #示例一
    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()
        
        
  • 相关阅读:
    [转]Eclipse之ANT使用
    [转]深入浅出解读微软云计算:让云触手可及
    [转]android的selector,背景选择器
    [转]android 个人铃声设置代码
    [转]Android中的Frame动画
    [转]WebGL中文教程
    节点遍历函数
    javascript深拷贝
    javascript 跨浏览器的事件系统
    CSS选择器的权重详解
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/14136030.html
Copyright © 2011-2022 走看看