反射牵扯到了import跟__import__这两个导入模块的用法;
日常导入普通模块的命令:
import modlename
简单反射使用__import__:
比如同一级包下有两个.py的文件分别是:modle1.py和modle2.py
modle1.py的内容:
#!/usr/bin/env python #encoding:utf-8 def index(): print '欢迎登陆后台管理页面'
如果在modle2.py里使用反射的方式导入modle1.py,则用__import__的方式为:
str = 'modle1' mod = __import__(str) func = getattr(mod,index) #调用index函数直接执行func() func()
下面是稍微复杂点的反射例子:
同级目录下的py文件分别是account.py、admin.py、test.py
account.py的内容如下:
#encoding:utf-8 #!/usr/bin/env python def login(): print '欢迎登陆!' def logout(): print '欢迎退出'
admin.py的内容如下:
#encoding:utf-8 #!/usr/bin/env python def index(): print '欢迎登陆后台管理页面' def setindex(): print '欢迎登陆后台设置页面'
主程序test.py代码如下
#!/usr/bin/env python #encoding:utf-8 import re str = raw_input('请输入 你的url:') if re.match('\w+\/\w+',str) : arr = str.split('/') mod = __import__(arr[0]) func = getattr(mod,arr[1]) func() else: print '格式不对'