• Python 之 反射解析


    一. 简介

     python中的反射工能使由四个内置函数提供 hasatrr(查出是否有某成员),getattr(获取成员), setattr(设置成员), delattr (删除成员)。

    二.应用
     1 #-*-coding:utf-8 _*_
     2 class reflect():
     3     def __init__(self):
     4         self.name = 'simple'
     5     def Bar(self):
     6         return 'Bar'
     7     def func(self):
     8         return 'func'
     9 
    10 obj = reflect()   #创建一个对象
    11 #检查是否有改成员, 有返回True  否则返回False
    12 hasattr(obj,"name")
    13 print (hasattr(obj,"name"))
    14 #获取该成员的信息
    15 getattr(obj,"name")
    16 print (getattr(obj,"name"))
    17 
    18 #设置成员
    19 setattr(obj,"age",22)
    20 setattr(obj,"show",lambda num: num+1)
    21 
    22 #删除成员   不能删除里面的方法比如Bar
    23 delattr(obj,"age")
    24 delattr(obj,"name")
    详细解析:      当我们要访问一个对象的成员时,应该是这样操作

     1 class Foo(object):
     2     def __init__(self):
     3         self.name = 'alex'
     4     def func(slef):
     5         return "func"
     6 obj = Foo()
     7 
     8 #访问字段
     9 obj.name               #  访问的是obj.name  变量名称
    10 # 执行方法
    11 obj.func()              #访问obj.func 表示去obj中或类中寻找变量名,并获取对应内存地址中的内容
    请使用其他方式获取obj对象中的name变量指向内存中的值
     1 class Foo(object):
     2     def __init__(self):
     3         self.name = 'alex'
     4     def func(slef):
     5         return "func"
     6 obj = Foo()
     7 # 不允许使用obj.name
     8 print(obj.__dict__["name"])
     9 
    10 #第二种方式
    11 print(getattr(obj,"name"))
    反射当前模块成员
     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3  
     4 import sys
     5  
     6  
     7 def s1():
     8     print('s1')
     9  
    10  
    11 def s2():
    12     print('s2')
    13  
    14  
    15 this_module = sys.modules[__name__]
    16  
    17 hasattr(this_module, 's1')
    18 getattr(this_module, 's2')
    类也是对象
    class Foo(object):
      
        staticField = "old boy"
      
        def __init__(self):
            self.name = 'wupeiqi'
      
        def func(self):
            return 'func'
      
        @staticmethod
        def bar():
            return 'bar'
      
    print getattr(Foo, 'staticField')
    print getattr(Foo, 'func')
    print getattr(Foo, 'bar')
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
      
    """
    程序目录:
        home.py
        index.py
     
    home.py:
     
    def dev():
        return 'dev'
     
      
    当前文件:
        index.py
    """
      
    import home as obj
      
    #obj.dev()
      
    func = getattr(obj, 'dev')
    func()
  • 相关阅读:
    C# 中的高性能计时器(Daniel Strigl著,野比译)(转)
    C#中SerialPort类 随笔
    迭代器
    枚举数与可枚举类型(笔记)
    jQuery的关注与学习
    敏捷开发的4句宣言 大数据
    bat脚本
    c++动态库中回调函数使用
    C++中遍历lua table
    vs2010编译release版本却依赖debug版本库msvcrd100.dll
  • 原文地址:https://www.cnblogs.com/simple001/p/7444626.html
Copyright © 2020-2023  润新知