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