python反射
反射的作用就是列出对象的所有属性和方法,反射就是告诉我们,这个对象到底是什么,提供了什么功能 。
介绍一种可以动态导入的方法。
以字符串的形式导入模块
以字符串的形式执行函数
首先,介绍一个函数 __import__, 这个函数传入的参数是module的名字,返回这个module,然后,在结合之前介绍过的getattr,于是,我们可以写出下面两句代码,实现对象的自省。
举个例子:
>>> import json >>> dir (json) [ 'JSONDecoder' , 'JSONEncoder' , '__all__' , '__author__' , '__builtins__' , '__doc__' , '__file__' , '__name__' , '__package__' , '__path__' , '__version__' , '_default_decoder' , '_default_encoder' , 'decoder' , 'dump' , 'dumps' , 'encoder' , 'load' , 'loads' , 'scanner' ] >>> |
如上所看,dir 是一个内置的 反射函数 ,可以列出对象的属性和方法。
再看另外一个内置的方法 :getattr
>>> getattr (json, 'encoder' ) <module 'json.encoder' from '/usr/lib/python2.7/json/encoder.pyc' > >>> getattr (json, 'load' ) <function load at 0x7f66af736140 > >>> |
可以取出指定属性
再看另外一个方法 :callable
>>> callable ( getattr (json, 'load' )) True >>> callable ( getattr (json, 'encoder' )) False >>> |
检查属性是否是可以调用的函数 。