作为解释型脚本语言,本质上其实根本不存在反射的问题。因为任意字符串都可以解释为代码。
perl中有eval, python中同样也有,不过细分成了eval和exec.
这个可以算是终极的反射杀器,由于威力太大,python3中在语法上做了一些限制。
允许exec导入到局部变量空间而不是全局空间。
比模块的加载更近一步,我们可以把一部分代码,或者说规则、模板,保存在远程的集中服务器或者配置中心,然后动态通过eval加载。这样就省去了不同机器分发代码的麻烦。
极端情况下,执行的服务器上可以只运行一个通用的框架,核心代码全部从中心服务器获取并注入。这个有点类似erlang的gensvr的思路了。
str='''
def DEV_R_CI_IOX_CPU():
"""DEV_R_CI_IOX_CPU"""
oids=".1.3.6.1.2.1.1.1.0"
ret=_httpsnmpget(oids)
return ret
t=DEV_R_CI_IOX_CPU
'''
#str=rpc.getfile(fid)
_locals = locals()
exec(str,globals(),_locals) #用局部变量来注入
f=_locals['t'] #模板中的函数名只有核对意义。