反射牵扯到了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 '格式不对'