反射的作用就是列出对象的所有属性和方法,反射就是告诉我们,这个对象到底是什么,提供了什么功能 。
介绍一种可以动态导入的方法。
以字符串的形式导入模块
以字符串的形式执行函数
首先,介绍一个函数 __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
>>>
|
检查属性是否是可以调用的函数 。