wingo1990

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Python之自省

“自省的威力”,刚看到这个题目的时候,真是一头雾水啊,只怪我语言功底太差啊!

自省:自我反省,检查之意。

具体联系到Python的意思是:Python可以查看内存中以对象形式存储的函数或模块信息,同样也可以进行相关的操作。

def info(object, spacing=10, collapse=1):   
    """Print methods and doc strings.
    
    Takes module, class, list, dictionary, or string."""
    methodList = [method for method in dir(object) if callable(getattr(object, method))]
    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
    print "\n".join(["%s %s" %
                      (method.ljust(spacing),
                       processFunc(str(getattr(object, method).__doc__)))
                     for method in methodList])

定义了一个函数info,含有三个参数,一个必选参数object,两个可选参数spacing和collapse。

methodlist是通过list的映射加过滤而形成的。

getattr这个函数尤其需要重视,他是自省的核心(当然,我到目前还不能充分的理解这句话),但是可以从上面的语句中可以看出:getattr可以获得对象object的方法method的引用,可以打印出来的是这个对象方法的地址。

对于getattr的理解是重点,其余的较为简单。如list映射,字符串格式化打印,ljust的用法,str的应用等。

posted on 2013-07-14 23:52  wingo1990  阅读(154)  评论(0)    收藏  举报