• 反射理论


    反射

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

    #示例一
    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()
        
        
  • 相关阅读:
    冲突域和广播域的区分
    internet 的一词多义
    大神洗礼第四讲——函数相关及编程技巧
    旋转字符串算法由浅入深
    一个交换程序的通用版本
    想起一些事情,都很遥远
    [转载]创业感想
    [转载]javascript小技巧
    [转载]在Asp.Net 2.0中应用DataFormatString
    [转载]C#的String.Format格式化举例
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/14136030.html
Copyright © 2020-2023  润新知